Как переименовать несколько файлов с разными именами одновременно? - PullRequest
1 голос
/ 29 марта 2019

У меня есть несколько файлов DOCX (примерно 250 файлов), каждый из которых имеет свое имя. Мне нужно переименовать все эти файлы, чтобы в результате каждое имя файла было порядковым номером предыдущего файла, как показано ниже:

1.docx - 2.docx - 3.docx - и т. Д.

Как я могу сделать это с помощью командной строки в моем Linux?

Моя самая большая проблема в том, что у каждого файла есть полностью нечитаемое имя.

Например:

ÄÿÇä ÄùàÄàÜ ÄæÆë ÜÖÆà.docx

Поскольку эти файлы изначально были названы на иврите, а при извлечении zip-файла файлам были присвоены неразборчивые имена.

Ответы [ 2 ]

1 голос
/ 29 марта 2019

Это может работать для вас (параллельно GNU):

parallel --dry-run mv -v ::: *.docx :::+ {1..300}.docx

Это напечатает команды для переименования всех файлов, заканчивающихся на .docx последовательными номерами до 300 включительно.

Дляна самом деле запустить команды (после проверки), удалить параметр --dry-run.

0 голосов
/ 29 марта 2019

Попробуйте:

count=0; for f in *.docx; do mv -i -- "$f" "$((count=count+1)).docx"; done

Если был шанс, что один из исходных файлов был на самом деле назван с простым номером, например 3.docx, тогда безопаснее переместить файлы в какой-то другой каталог в то же время, когда они переименовываются:

count=0; for f in *.docx; do mv -i -- "$f" "some/other/dir/$((count=count+1)).docx"; done

Как это работает

  • count=0

    Это инициализирует переменную count в ноль.

  • for f in *.docx; do

    Это запускает цикл с назначением f имени каждого файла docx по очереди.

  • mv -i -- "$f" "some/other/dir/$((count=count+1)).docx"

    Переименовывает / перемещает файлы. $((count=count+1)) говорит оболочке увеличивать count каждый раз.

    В bash $((count=count+1)) можно упростить до $((++count)).

  • done

    Это сигнализирует об окончании цикла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...