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

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

在 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

答案1

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

答案2

假设文件按顺序命名且没有任何缺失部分,并且除了扩展名之前的数字之外不使用任何其他内容,这是纯 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

相关内容