Попробуйте это в bash
оболочке:
find -type f -name "*_001.jpg" -print0 | while read -d $'\0' f; do t=$(mktemp --tmpdir=$(dirname "$f")) [ -f "$_002.jpg" ] && \ mv -v "$f" "$t" && mv -v "$_002.jpg" "$f" && mv -v "$t" "$_002.jpg" done
Как скрипт, он должен выглядеть так (немного более читабельно):
#!/bin/bash find -type f -name "*_001.jpg" -print0 | while read -d $'\0' f; do t=$(mktemp --tmpdir=$(dirname "$f")) [ -f "$_002.jpg" ] && \ mv -v "$f" "$t" && \ mv -v "$_002.jpg" "$f" && \ mv -v "$t" "$_002.jpg" done
Объяснение:
- Сначала мы создаем список файлов с
find
. Для обработки странных имен файлов используйте-print0
для разделения файлов с нулевым байтом while read -d $'\0' f
: Чтение вывода сfind
разделителями, равным nullbyte- Создать временный файл
- Проверьте, существуют ли оба файла
- Переместить оригинал (001) в временный файл
- Переместить 002 в 001
- Переместить временный файл в 002