将具有特定扩展名的所有文件从多个子目录移动到一个目录中

Inq*_*Kea 84 command-line find recursive files

我在几个目录中有一堆 .zip 文件:

Fol1/Fol2
Fol3
Fol4/Fol5
Run Code Online (Sandbox Code Playgroud)

我将如何将它们全部移动到一个通用的基本文件夹?

Gil*_*il' 106

转到包含 zip 文件 ( cd …)的树的顶级目录,然后运行

mv **/*.zip /path/to/single/target/directory/
Run Code Online (Sandbox Code Playgroud)

这在 zsh 中开箱即用。如果您的 shell 是 bash,您需要先运行shopt -s globstar(您可以并且应该将此命令放在您的 .bashrc 中~/.bashrc)。如果你的 shell 是 ksh,你需要先运行set -o globstar(把它放在你的~/.kshrc)中。

或者,使用find,它可以在没有特殊准备的情况下随处使用,但更复杂:

find . -name '*.zip' -exec mv {} /path/to/single/target/directory/ \;
Run Code Online (Sandbox Code Playgroud)

如果以后要删除空目录,请在 zsh 中:

rmdir **/*(/^Fod)
Run Code Online (Sandbox Code Playgroud)

在 bash 或 ksh 中:

rmdir **/*/
Run Code Online (Sandbox Code Playgroud)

只要有空目录要删除,就重复。或者,在任何外壳中

find . -depth -type d -empty -exec rmdir {} \;
Run Code Online (Sandbox Code Playgroud)


Ber*_*ard 22

如果您只想移动.zip文件,则可以执行以下操作

mkdir ./zipfiles
find . -name "*.zip" -exec mv "{}" ./zipfiles \;
Run Code Online (Sandbox Code Playgroud)

  • 这是最好的方法。如果您找到,则简单且有效。另一个很酷的事情是,如果你想移动任何类型的文件,你可以使用类型参数来查找,例如:`find 。输入 f -exec mv "{}" dest-dir \;` (2认同)

小智 5

这在移动数据时是安全的并且无错误,支持大多数发行版,无论版本如何。此命令将扫描子目录,然后移动或复制到新的目标目录。

find . -name *.flac -exec mv '{}' "./flac/" ";"
Run Code Online (Sandbox Code Playgroud)
  • 在包含包含您要移动的文件的子目录的主目录中运行此命令。
  • 您可以在其中更改*.flac*.zip与您的情况类似的任何内容。或者*.doc任何扩展都可以。
  • andmv是移动文件的命令,或者您可以使用cp复制数据而不是移动。
  • ./flac/是我要将所有 FLAC 文件移动到的目标目录。您还可以给它一个完整的路径,例如/home/myid/flac/

完整的例子。(在这种情况下,有许多带有音乐艺术家姓名的子目录/home/myid/Music/,然后 FLAC 文件位于不同的子目录级别。因为我不需要艺术家文件夹,但希望将所有 FLAC 文件放入一个目录中/home/myid/Music/flac/

cd /home/myid/Music
mkdir flac
find . -name *.flac -exec mv '{}' "./flac/" ";"
cd flac
ls
Run Code Online (Sandbox Code Playgroud)

然后它将显示所有 FLAC 文件。