Переименование нескольких файлов на основе даты изменения

Я смотрел в Интернете на нескольких сайтах, но я не могу найти решение, и страница справки не ясно (я начинающий с CLI). Это моя проблема: у меня есть около 200 файлов в каталоге, эти файлы не имеют расширений и имеют неправильные имена.

Для простоты представьте, что все файлы выглядят примерно так:

Delta ---   2.0K ---  01/01/1993
Gamma ---   2.1k ---  01/01/1991
Alfa  ---   2.2k ---  04/15/1992
Bravo ---   2.3k ---  04/10/1992

То, что я пытаюсь сделать, это:

переименуйте все файлы таким образом 1, 2, 3,.., но так, чтобы имя было установлено в соответствии с целой датой (не только год или месяц), так что вывод должен выглядеть примерно так

1 ---   2.1k ---  01/01/1991
2 ---   2.3k ---  04/10/1992
3 ---   2.2k ---  04/15/1992
4 ---   2.0k ---  01/01/1993

Также я хочу добавить расширение, например.TXT, чтобы конечный результат мог быть:

1.txt ---   2.1k ---  01/01/1991
2.txt ---   2.3k ---  04/10/1992
3.txt ---   2.2k ---  04/15/1992
4.txt ---   2.0k ---  01/01/1993

2 ответа

Решение

Сделав что-то подобное раньше, я могу заверить вас, что легко сделать опечатку, которая даст вам еще большую проблему, которая у вас уже есть. Используйте эту информацию на свой страх и риск.

При подсказке bash;

i=0 ; for f in `ls -rt` ; do i=$(expr $i + 1); mv $f $i.txt; done
  • i действует как счетчик
  • ls -rt перечисляет файлы в обратном порядке по времени изменения - если вы скопировали, переместили или иным образом изменили файлы, это может не дать ожидаемый порядок файлов. Проверьте это внимательно, запустив ls -rt в качестве отдельной команды и проверьте это - дважды.
  • for f inls -rt; do повторяет список файлов с 'f', берущей каждое имя файла
  • i=$(expr $i + 1) увеличивает счетчик
  • mv $f $i.txt переименовывает файл с помощью счетчика и добавляет расширение.txt
  • done замыкает цикл
  • обратите внимание, что команды в цикле разделяются точкой с запятой, поэтому, если вы добавите еще одну команду, введите точку с запятой

Через питона,

script.py

import os
import shutil
directory = sys.argv[1]
count = '0'
for item in os.listdir(directory):
    count = str(int(count)+1)
    newname = re.sub(r'.*', count+'.txt', item)
    shutil.move(directory+"/"+item, directory+"/"+newname)

Как запустить?

python3 script.py /path/to/the/directory
Другие вопросы по тегам