Bash脚本将文件夹及其子文件夹中的所有png文件移动到另一个目录?

Bash脚本将文件夹及其子文件夹中的所有png文件移动到另一个目录?,bash,Bash,在~/Desktop/a/中,我有.png文件,其中的子文件夹也有.png文件 我想将所有这些.png文件移动到另一个文件夹 这是到目前为止我的代码。它会运行,但不会将任何内容放置到目标文件夹中。有什么问题 #!/bin/bash cd ~/Desktop/a/ for f in $(find . -type f -name "*.png") do mv $f ~/Desktop/new/ done 我猜这些图像文件名可能包含空格或其他特殊字符 find ~/Desktop/a/ -

在~/Desktop/a/中,我有.png文件,其中的子文件夹也有.png文件

我想将所有这些.png文件移动到另一个文件夹

这是到目前为止我的代码。它会运行,但不会将任何内容放置到目标文件夹中。有什么问题

#!/bin/bash
cd ~/Desktop/a/
for f in $(find . -type f -name "*.png")
do 
    mv $f ~/Desktop/new/
done

我猜这些图像文件名可能包含空格或其他特殊字符

find ~/Desktop/a/ -type f -name "*.png" -exec mv "{}" ~/Desktop/new/ \;


如果您的bash足够新,还可以使用
globstar

cd ~/Desktop/a || exit 1
shopt -s globstar
mv -- **/*.png ~/Desktop/new
或者(如果一个命令行中容纳的文件太多):


这可能会有帮助:请看:我不明白为什么这个脚本会无声地失败。但无论如何,我都要用双引号把
$f
括起来。您可能想尝试
echo
而不是
mv
来查找$(find…)
中的f基本上是一个bug。看见
cd ~/Desktop/a || exit 1
shopt -s globstar
mv -- **/*.png ~/Desktop/new
shopt -s globstar
for f in ~/Desktop/a/**/*.png; do
    mv -- "$f" ~/Desktop/new
done