несколько регистрируют, переименовывают на основе даты модификации

Я считал сеть на нескольких сайтах, но я, может казаться, не нахожу решение, и страница справочника не является четкой (я - новичок с 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
1
задан 16 December 2014 в 20:15

2 ответа

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

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

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 замыкает круг
  • обратите внимание, что команды в цикле разделяются точками с запятой, поэтому если Вы добавляете другую команду, следуете за нею с точкой с запятой
2
ответ дан 7 December 2019 в 14:04

Через Python,

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
0
ответ дан 7 December 2019 в 14:04

Другие вопросы по тегам:

Похожие вопросы: