在 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