当前位置: 首页 > 面试题库 >

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

西门高歌
2023-03-14
问题内容

因此,我具有以下结构:

.
..
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

将来,使用xargs,如何将模拟文件的扩展名更改为第二个命令?

据我所知,那是不可能的。最好的方法是使用带有参数替换的for循环,就像上面的例子一样:

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

如果您要转换的子目录中有文件,则可以通过管道find传递到while read循环:

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

注意:
在shell脚本中使用输出通常被认为是一个坏主意ls。尽管您的示例可能运行良好,但有许多示例却并非如此。例如,如果您的文件名恰好在其中包含换行符(unix允许),则ls可能不会为您转义那些。(这实际上取决于您的实现,这是不在ls脚本中使用的另一个原因;它的行为在一个框和下一个框之间有很大差异。)如果find在while读取循环或文件遍历中使用,您将获得更一致的结果。(例如*.png)在for循环中。



 类似资料:
  • 问题内容: 我想批量重命名目录中的多个文件,以便从文件名中删除前面的数字和连字符。 如何使用linux命令执行此操作? 问题答案: 这应该使它: 它从块的开头(即数字)开始多次,然后连字符并将其从文件名中删除。 如果不在您的计算机中,则可以使用循环和: 测试 要么:

  • 问题内容: 我的.aliases中具有以下别名: 并且我想在名称中包含字符串的所有文件中查找不区分大小写的内容: 这是我得到的: 有什么方法可以在xargs中使用别名,还是必须使用完整版本: 注意: 这是一个简单的示例。此外,我还有一些非常复杂的别名,无法轻易手动扩展。 编辑: 我用过,所以请指定答案是否特定于外壳。 问题答案: 别名是外壳特定的- 在这种情况下,很可能是bash特定的。要执行别名

  • 问题内容: 有没有一种简单的方法可以使用Python重命名目录中已包含的一组文件? 示例: 我有一个充满* .doc文件的目录,我想以一致的方式重命名它们。 X.doc->“ new(X).doc” Y.doc->“ new(Y).doc” 问题答案: 这样的重命名非常容易,例如使用os和glob模块: 然后可以在示例中使用它,如下所示: 上面的示例会将dir中的所有文件都转换为,其中是文件的先前

  • 本文向大家介绍python实现批量文件重命名,包括了python实现批量文件重命名的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了python批量文件重命名的具体代码,供大家参考,具体内容如下 问题描述 最近遇到朋友求助,如何将大量文件名前面的某些字符删除。 即将图中文件前的编号删除。 Python实现 用到了python中的os模块,os模块中的rename方法可以实现对文件的重命

  • 本文向大家介绍PowerShell实现批量重命名文件,包括了PowerShell实现批量重命名文件的使用技巧和注意事项,需要的朋友参考一下 假设你有一个很大的文件夹,里面全是图片,你想对文件夹中图片的名称,按照某个统一的规则进行重命名,本文的脚本会简单进行演示: 文件夹中所有的JPG文件都被重命名过了,新的图片文件名形如”pic_”和一个6位的数字,你根据这个模板稍加改装,可以完成更加丰富的自定义

  • 本文向大家介绍PowerShell批量文件重命名操作实例,包括了PowerShell批量文件重命名操作实例的使用技巧和注意事项,需要的朋友参考一下 总算发现PowerShell相对于CMD来说实用的地方了。 事情是这样的,我下载了一些美剧(抱歉,看完会删的),通常文件名都比较长,包含了很多我不需要的信息,,比如: 我想要的只是: 由于我需要的文件名是原文件名中固定的一部分,于是我想到了PowerS