在命令行和Xargs中批量重命名文件?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (108)

我有以下结构:

.
..
a.png
b.png 
c.png

我运行了一个命令来调整它们的大小

ls | xargs -I xx convert xx -resize xx.jpg

现在我的目录是这样的:

.
..
a.png.jpg
a.png
b.png.jpg
b.png
c.png.jpg
c.png

第一个问题是,我如何重命名文件,以便我可以只有一个扩展名。不是两个? 第二个问题是,在将来使用xargs时,如何将文件的扩展名更改为第二个命令?

提问于
用户回答回答于

第一个问题:


cd dir/with/messedup/files

for file in *.png.jpg; do
  mv "$file" "${file%.png.jpg}.jpg"
done
 

第二个问题:

据我所知,这是无法完成的。最好的办法是使用一个带有参数替换的for循环,就像上面那样:

for file in *.png; do
  convert "$file" -resize "${file%.png}.jpg"
done

如果你在你想要转换的子目录中有文件,那么你可以:

find . -type f -name '*.png' |
while read file; do
  convert "$file" -resize "${file%.png}.jpg"
done
用户回答回答于

这也可以通过xargssed更改文件扩展名来完成。

ls | grep \.png$ | sed 'p;s/\.png/\.jpg/' | xargs -n2 mv

你可以打印原始文件名以及您想要的文件名。然后让xargs在移动命令中使用这两个参数。对于单线程,我还添加了一个grep来过滤掉任何不是* .png文件的东西。

所属标签

可能回答问题的人

  • EatRice

    16 粉丝0 提问143 回答
  • 成都加米谷大数据

    11 粉丝0 提问11 回答
  • 富有想象力的人

    5 粉丝0 提问344 回答
  • 最爱开车啦

    9 粉丝503 提问1.6K 回答

扫码关注云+社区

领取腾讯云代金券