24

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

最好将它们重命名为它们所在的文件夹,尽管那并不重要。我对 bash 并不十分熟悉。

4

3 回答 3

40

要递归移动文件,请find结合mv.

find src/dir/ -name '*.txt' -exec mv -t target/dir/ -- {} +

或者,如果在没有 GNU 版本的 UNIX 系统find(例如 macOS)上,请使用:

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

要在移动文件时重命名文件,会比较棘手。一种方法是使用一个循环"${var//from/to}"来替换所有出现的fromwith toin $var

find src/dir/ -name '*.txt' -print0 | while IFS= read -rd $'\0' file; do
    mv -- "$file" target/dir/"${file//\//_}"
done

这很难看,因为from它是一个斜杠,需要转义为\/.

也可以看看:

于 2013-01-15T19:56:39.903 回答
16

尝试这个:

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

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

于 2013-01-15T20:11:04.383 回答
1

如果它只是一个级别:

mv *.txt */*.txt target/directory/somewhere/.
于 2013-01-15T19:59:50.560 回答