如何将具有特定文件扩展名的所有文件从子目录移动到单个目录

如何将具有特定文件扩展名的所有文件从子目录移动到单个目录

我有一个包含许多子目录的目录。子目录包含许多类型的具有不同文件扩展名的文件。我想将一种类型的所有文件移动(而不是复制)到新目录中。我需要所有这些文件都位于同一目录中,即它需要是平坦的。

(我的用例是,我想将名为 *.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

相关内容