关于递归:递归地将特定类型的所有文件移动到Bash中的目标目录中

Recursively moving all files of a specific type into a target directory in Bash

如何将所有.txt文件从文件夹和包含的所有文件夹移到目标目录中。

最好将它们重命名为包含在其中的文件夹,尽管这并不重要。我对巴什不太熟悉。


要递归地移动文件,请将findmv组合起来。

1
find src/dir/ -name '*.txt' -exec mv {} target/dir/ \;

要在移动文件时对其进行重命名,就更难了。一种方法是有一个循环,通过tr / _传递每个文件名,该循环将斜杠转换为下划线。

1
2
3
find src/dir/ -name '*.txt' | while read file; do
    mv"$file""target/dir/$(tr / _ <<<"$file")"
done


试试这个:

1
find source -name '*.txt' | xargs -I files mv files target

这将比-exec的任何选项都快,因为它不会为需要移动的每个文件调用单个mv进程。


如果只是一个层次:

1
mv *.txt */*.txt target/directory/somewhere/.