Я хочу переименовать файлы в каталоге к порядковым номерам, на основе этого правила:
имя файла - [некоторая дата] => имя файла - [дата предыдущего дня]
Например, file20170329
file20170328
и file20170327
должны быть переименованы к file20170328
file20170327
и file20170326
.
Я имею как 100 файлов, таким образом, мне нужен лучший прием, чем переименование каждого файла индивидуально.
Следующий сценарий:
mv
я создал /tmp/storage
папка, и сценарий скопирует файлы в то местоположение. Таким образом, переименовывая один файл не повредит другой файл, если случайно basefilename для обоих файлов будет тем же, но дата, отличаются за один день Примечание: Чтобы позволить сценарию выполняться cp
, нужно удалить echo
из echo cp ...
строка
mkdir -p /tmp/storage
for f in *
do
if [ "${#f}" -gt 8 ]; then
filebasename=${f::-8}
TODAY=${f: -8}
YESTERDAY=`date '+%C%y%m%d' -d "$TODAY-1 days"`
echo cp $f /tmp/storage/${f//$TODAY}$YESTERDAY;
fi
done
пример:
$ ls *20*
aaa2hhh20170329 aaahhh20170329 xajds20170222 xajsxs20170224
результат сценария:
cp aaa2hhh20170329 /tmp/storage/aaa2hhh20170328
cp aaahhh20170329 /tmp/storage/aaahhh20170328
cp xajds20170222 /tmp/storage/xajds20170221
cp xajsxs20170224 /tmp/storage/xajsxs20170223
Если у Вас есть 100 файлов (и имейте доступ к жемчугу 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}
или что бы то ни было.
Это очень медленно. Потребуется, возможно, 2 минуты или больше переименовать 100 файлов. Но это работает.
или если Вы предпочитаете подход GUI, даете krename попытку, это имеет много модулей, и можно записать пользовательские сценарии в нем, "функция системы дат", "плагин времени даты" мог работать на Вас
sudo apt-get install krename