Fat*_*agh 4 command-line batch-rename
我的许多目录中有很多拼写错误的文件。
它们是拼写的Localisation.json,我想将它们更改为Localization.json.
我尝试了这个,但它不起作用:
find -type f -name Localis* | xargs mv Localization.json
Run Code Online (Sandbox Code Playgroud)
Raf*_*ffa 13
首先,find -type f -name Localis* | xargs mv Localization.json永远不会工作...您需要类似xargs -I {} mv {} Localization.json或设置的xargs选项-n 1。
其次,mv这里的选择并不正确,因为它会导致当前工作目录的所有子目录中名为eg的所有文件Localisation.json(或任何find匹配和输出的Localization.json文件)移动到当前工作目录并重命名为每次都覆盖该文件。 .. 例如find可能会输出类似的内容./subdirectory/Localisation.json,并且会mv像这样翻译:
mv ./subdirectory/Localisation.json Localization.json
Run Code Online (Sandbox Code Playgroud)
将目标目录更改为当前工作目录...您肯定不希望这样。
所以, ...
您可以将find的输出格式化为 NULL 分隔(为了尽量避免破坏包含例如空格的文件名),然后将其通过管道-print0传输到,如下所示:xargs -0rename
find -type f -name "Localisation.json" -print0 | xargs -0 rename -n 's/Localisation\.json$/Localization.json/'
Run Code Online (Sandbox Code Playgroud)
或者。甚至更好,而且相对高效......你可以使用find's own ,如下所示-exec:rename
find -type f -name "Localisation.json" -exec rename -n 's/Localisation\.json$/Localization.json/' {} \+
Run Code Online (Sandbox Code Playgroud)
引用例如的论点很-name重要-name "Localis*"
请注意,sCurrentName部分中的所有内容都被视为正则表达式...因此,转义点用于匹配文字,而 则匹配行尾,排除重命名的目录,以防您有具有相同文件名的父目录例如(这也可以通过的选项来实现)rename's/CurrentName/NewName/'\..$Localisation.json/Localisation.jsonrename--nopath
的rename选项-n只会模拟重命名...当对输出感到满意时将其删除以进行实际的重命名。
您可以使用find's -execdir(从包含匹配文件的子目录运行指定的命令),mv如下所示:
find -type f -name "Localisation.json" -execdir echo mv -n -- {} Localization.json \;
Run Code Online (Sandbox Code Playgroud)
您还可以在命令字符串中使用find's -execwith ,利用's 参数扩展并获得相同的结果,如下所示:mvbashbash
find -type f -name "Localisation.json" -exec bash -c 'echo mv -n -- "$1" "${1/%Localisation.json/Localization.json}"' _ {} \;
Run Code Online (Sandbox Code Playgroud)
这只会进行重命名试运行(模拟) ...echo对输出满意时删除以进行实际重命名。
或者,在 中bash,您可以使用递归 shell 通配符和参数扩展来mv实现相同的结果,如下所示:
shopt -s globstar; for f in **/Localisation.json; do
# Renaming dry-run(simulation) ... Remove "echo" when satisfied with output to do the actual renaming.
echo mv -n -- "$f" "${f/%Localisation.json/Localization.json}"
done; shopt -u globstar
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1718 次 |
| 最近记录: |