Я хочу переименовать файлы в каталоге на последовательные номера на основе этого правила: filename- [some date] => filename- [дата предыдущего дня]
Например, file20170329 [ f2] и file20170327 должны быть переименованы в file20170328 file20170327 и file20170326.
У меня есть 100 файлов, поэтому мне нужен лучший трюк, чем переименование каждого файла отдельно. [!d5 ]
Если у вас есть 100 файлов (и у вас есть доступ к perl rename, как правило, в Ubuntu), вы можете использовать:
for n in {100..1}; do rename -n "s/$(date --date="$n days ago" +"%Y%m%d")/$(date --date="$(($n+1)) days ago" +"%Y%m%d")/" *; done
Теперь, когда вы используете -n для тестирования, жалуется следующим образом:
rename(file20170217, file20170216)
file20170218 not renamed: file20170217 already exists
file20170219 not renamed: file20170218 already exists
Но когда вы запускаете его без -n, файл больше не существует, поэтому переименование выполнено успешно:
for n in {100..1}; do rename "s/$(date --date="$n days ago" +"%Y%m%d")/$(date --date="$(($n+1)) days ago" +"%Y%m%d")/" *; done
Если у вас больше, чем 100 файлов, вам нужно увеличить диапазон до {150..1} или что угодно.
Это очень медленно. Для переименования 100 файлов потребуется 2 минуты или более. Но это работает.
, или если вы предпочитаете подход к графическому интерфейсу, попробуйте krename, у него много модулей, и вы можете писать в нем собственные скрипты, «функция даты», «плагин с датой» может работать для вас
sudo apt-get install krename