我在几个目录中有一堆 .zip 文件:
Fol1/Fol2
Fol3
Fol4/Fol5
我如何将它们全部移动到一个公共基本文件夹?
答案1
转到包含 zip 文件的树的顶层目录 ( cd …
),然后运行
mv **/*.zip /path/to/single/target/directory/
这在 zsh 中是开箱即用的。如果您的 shell 是 bash,则需要shopt -s globstar
先运行(您可以而且应该将此命令放在您的 中~/.bashrc
)。如果您的 shell 是 ksh,则需要set -o globstar
先运行(将其放入您的~/.kshrc
)。
或者,使用find
,它可以在任何地方使用,无需特殊准备,但更复杂:
find . -name '*.zip' -exec mv {} /path/to/single/target/directory/ \;
如果您想随后删除空目录,请在 zsh 中:
rmdir **/*(/^Fod)
在 bash 或 ksh 中:
rmdir **/*/
并重复,只要有空目录需要删除。或者,在任何 shell 中
find . -depth -type d -empty -exec rmdir {} \;
答案2
如果您只想移动文件.zip
,您可以执行类似的操作
mkdir ./zipfiles
find . -name "*.zip" -exec mv "{}" ./zipfiles \;
答案3
这在移动数据时是安全的并且无错误,支持大多数发行版,无论版本如何。此命令将扫描子目录,然后移动或复制到新的目标目录。
find . -name *.flac -exec mv '{}' "./flac/" ";"
- 在包含包含您要移动的文件的子目录的主目录中运行此命令。
- 您可以在其中更改为与您的情况
*.flac
类似的任何内容。*.zip
或者*.doc
任何扩展都可以。 - and
mv
是移动文件的命令,或者您可以使用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
然后它将显示所有 FLAC 文件。
答案4
假设您有 GNU 版本的 find 和 mv,以下内容将比现有的基于 find 的答案更有效:
find . -name '*.zip' -exec mv --target-directory='/path/to/outputdir' '{}' +
+
在 find -exec 末尾使用 a意味着文件列表将传递给 mv 命令,而不是对每个找到的文件执行一个 mv 命令。然而,这样做的一个限制是你只能将“{}”放在命令的末尾,这需要使用 mv --target-directory 选项,据我所知这是一个 GNU 主义。