我有一个包含许多子目录的目录。子目录包含许多类型的具有不同文件扩展名的文件。我想将一种类型的所有文件移动(而不是复制)到新目录中。我需要所有这些文件都位于同一目录中,即它需要是平坦的。
(我的用例是,我想将名为 *.epub 的电子书从多个目录移动到 EPUB 阅读器可以找到的单个文件夹中。)
答案1
在 zsh 中,您可以使用递归 glob:
mkdir ~/epubs
mv -- **/*.epub ~/epubs/
在 bash ≥4 中,运行shopt -s globstar
(您可以将其放入您的~/.bashrc
)然后运行上面的命令。在ksh中,set -o globstar
先运行。
仅使用 POSIX 工具,运行find
:
find . -name '*.epub' -exec mv {} ~/epubs \;
答案2
尝试这样做:
mkdir ../new_dir
find . -type f -name '*.epub' -exec mv {} ../new_dir/ \;
如果所有文件都被命名name.epub
,那么您需要增加一个像这样的变量(使用巴什)
mkdir ../new_dir
find . -type f -name '*.epub' |
while read a; do
((c++))
base="${a##*/}"
mv "$a" "../new_dir/${base%.epub}_$(printf %.03d $c).epub"
done
答案3
Linux下使用bash:
shopt -s nullglob globstar
mv -t ~/epub_directory ~/big_dir/**/*.epub