重命名并反转文件列表的编号


0

在Linux中,最好使用bash,实现下面目标的最佳方法是什么?

说我有一系列编号的文件

001.png, 002.png, 003.png

将它们移动/重命名为倒序的最佳方法是什么?

加分点:我有一系列1500个文件,我实际上想要颠倒40个第二个块的顺序。注意这些字母不是名字的一部分。我用它们来表明内容的独特性。

001a, 002b, ..., 040c <- leave as is
041a, 042b, ..., 080c <- reverse order of these files
081a, 082b, ..., 120c <- leave as is
121a, 122b, ..., 160a <- reverse order of these files

变为:

001a, 002b, ..., 040c
041c, 042b, ..., 080a
081a, 082b, ..., 120c
121c, 122b, ..., 160a

Answers:


0

“奖励”部分(仅作用于偶数行)是重复的,这里有一组答案:https//unix.stackexchange.com/questions/26723/print-odd-numbered-lines-print-even -numbered线


这不是问题的完整答案。它只解释了如何对每条偶数或奇数行进行操作,而不是如何执行重命名。此外,如果您将实际答案放在此处,而不仅仅是链接到另一个SE站点,则会更受欢迎。谢谢。
slhck 2013年

对不起......我以为OP已经列出了他的文件,这样在SE问题上发布的解决方案的任何输出都可以输入“反向”程序,如下面所写。(而不是images=(*.png)while read ; do images=$REPLY; .... done“每隔一行”那样操作的东西)。仔细检查表明文件列表可能不存在于文本文件中,因此,不是仅仅为了跳过行来构建文件,最好为此特定的内容构建1-40,81-120等的列表。案件。
肯特

0

假设文件是​​按顺序命名的,没有任何缺失的部分,并且除了扩展名之前的数字之外不使用任何其他内容,这是纯粹的Bash(从3.0开始)。

从PNG图像所在的目录中运行此命令。

# create a temporary directory
mkdir -p ./tmp

# create an array of images and find maximum number
images=(*.png)
max=${#images[*]}

# loop through array keys and subtract the key from maximum number to reverse
for i in "${!images[@]}"; do 
  # rename to the temporary directory, with three-digit zero padding
  mv -- "${images[$i]}" ./tmp/$(printf "%03d.png" $(($max - i)))
done

# move files back and remove temporary directory
mv ./tmp/*.png .
rmdir ./tmp
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.