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

时间:2018-11-25 08:22:55

标签: 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

2 个答案:

答案 0 :(得分:2)

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

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

find ~/Desktop/a/ -type f -name "*.png" -print0 | xargs -0 -I{} mv "{}" ~/Desktop/new/

答案 1 :(得分:1)

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

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