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

joh*_*org 5 shell rename files

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

(我的用例是我想将名为 *.epub 的电子书从多个目录移动到一个 EPUB 阅读器可以找到的文件夹中。)

Gil*_*il' 12

在 zsh 中,您可以使用递归 glob:

mkdir ~/epubs
mv -- **/*.epub ~/epubs/
Run Code Online (Sandbox Code Playgroud)

在 bash ?4 中,运行shopt -s globstar(你可以把它放在你的~/.bashrc)然后执行上面的命令。在 ksh 中,set -o globstar先运行。

仅使用 POSIX 工具,运行find

find . -name '*.epub' -exec mv {} ~/epubs \;
Run Code Online (Sandbox Code Playgroud)


Gil*_*not 6

尝试这样做:

mkdir ../new_dir
find . -type f -name '*.epub' -exec mv {} ../new_dir/ \;
Run Code Online (Sandbox Code Playgroud)

如果所有文件都已命名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
Run Code Online (Sandbox Code Playgroud)