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)
尝试这样做:
mkdir ../new_dir
find . -type f -name '*.epub' -exec mv {} ../new_dir/ \;
Run Code Online (Sandbox Code Playgroud)
如果所有文件都已命名name.epub
,那么您需要增加这样的变量(使用bash)
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)