rvg*_*rvg 5 unix command-line mv macos
我有许多子目录,我想使用 Mac 上的一行终端命令将其中包含的所有文件移动到当前目录。我知道我的文件名并不都是唯一的,并且想在文件扩展名之前添加后缀。
\n\n我发现了类似的问题问:将子目录中的所有文件移动到当前目录?建议使用:
\n\nfind ./*/* -type f -print0 | xargs -0 -J % mv % . \nRun Code Online (Sandbox Code Playgroud)\n\n但这仅对唯一的文件名有帮助。例如,给定以下树:
\n\n.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 bar\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 test1.jpg\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 test2.jpg\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 test3.jpg\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 foo\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 test1.jpg\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 test2.jpg\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 test3.jpg\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 qux\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 test3.jpg\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 corge\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 test3.jpg\nRun Code Online (Sandbox Code Playgroud)\n\n我希望看到类似于以下内容的结果:
\n\n.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 bar\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 foo\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 qux\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 corge\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 test1.jpg\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 test1a.jpg\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 test2.jpg\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 test2a.jpg\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 test3.jpg\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 test3a.jpg\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 test3b.jpg\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 test3c.jpg\nRun Code Online (Sandbox Code Playgroud)\n\n有人可以帮忙吗?
\n除非您的示例中的严格顺序命名对您来说非常重要,否则我会建议使用以下“保持简单”/“快速而肮脏”的解决方案:
find . -type f |
while read filename; do
basename=$(basename "$filename");
newname=$(echo "$basename" | sed "s/^\(.*\)\(\.[^\.]\+\)$/\1(XXXX)\2/");
printf "mv \"%s\" \"%s\";\n" "$filename" "$(mktemp -u "$newname")";
done
Run Code Online (Sandbox Code Playgroud)
这只打印将要执行的命令,因此通过检查输出来检查是否健全,然后复制并粘贴到命令行中,如果一切都令您满意的话。
用英语:找到所有常规文件,将它们的文件名从“test1.jpg”转换为“test1(XXXX).jpg”形式,其中“XXXX”将被拾取并用 mktemp 替换为随机字符,然后创建“ mv”此操作的命令行。
要进一步降低文件名冲突风险,只需添加更多“X”即可。
玩得开心。
| 归档时间: |
|
| 查看次数: |
3656 次 |
| 最近记录: |