第一次回答,希望不会太惨。
我遇到了同样的麻烦,我设法结合Schleis 答案和adrianN评论解决了它。问题在于某些带有空格字符的文件或 ext4 中允许的其他特殊文件。
它应该增加使用任何 UTF8 文件名的能力。就这个:
find . -type f -iname \*.png.jpg -print0 | sed -z 'p;s/\.png\.jpg/\.jpg/' | xargs -0 -n2 mv
我读过(不记得在哪里)过去 sed(或 xarg?)在处理空字符时遇到了麻烦。好像就没有这种情况了。
我在下面为像我这样喜欢了解他们所做的事情而不仅仅是复制一些答案的人添加了一些解释。;-)
命令参数:
寻找 。:在当前目录中查找
-type f :常规文件(例如:不是设备、目录等)
-iname :根据文件名搜索,但匹配不区分大小写。以防万一您的图片软件写“PNG”而不是“png”
-print0 :分隔由 NULL 字符找到的内容
sed -z :将空字符视为要处理的不同文本元素的唯一分隔符;对于收到的文本和修改后的文本
p :写入第一个收到的行
s/.png.jpg/.jpg/ :用 .jpg 替换 .png.jpg 并写入
xargs -0 :输入项以空字符而不是其他任何字符终止
-n2 :将从 sed 接收到的两个参数发送到 mv
每个命令的作用:
寻找 :
file1.png.jpgNULLfile2.png.jpgNULLfile3.png.jpgNULLfile4.png.jpg
sed
file1.png.jpgNULLfile1.jpgNULLfile2.png.jpgNULLfile2.jpgNULLfile3.png.jpgNULLfile3.jpgNULLfile4.png.jpgNULLfile4.jpg
xargs
mv file1.png file1.jpg
mv file2.png file2.jpg
mv file3.png file3.jpg
mv file4.png file4.jpg