1

Я нашел множество способов добавить простой префикс к файлам в папке на Linux, например

for FILENAME in *; do mv $FILENAME REF_$FILENAME; done 

(https://stackoverflow.com/questions/4787413/rename-files-and-directories-add-prefix)

Я хотел бы сделать это, но с изменением REF для каждого файла на REFa, REFb, REFc, ... Это будет выполняться вручную в одном каталоге, потому что REF будет отличаться для каждого.

Заранее спасибо, потому что победитель буквально сэкономит мне часы ручного ввода данных ;-)

2 ответа2

0

Быстрый и грязный ответ будет следующим:

array=(`echo {a..z}{a..z}{a..z}`);i=0; for FILENAME in *; do  mv $FILENAME REF${array[i]}_$FILENAME; i=$(($i+1)); done

Но я бы предпочел сделать это в виде скрипта, который затем можно запустить - его проще поддерживать и описывать

array=(`echo {a..z}{a..z}{a..z}`)
i=0 
for FILENAME in *
do 
    mv $FILENAME REF${array[i]}_$FILENAME 
    i=$(($i+1)) 
done

Первая строка загружает последовательность из трех цифр, начиная с aaa и заканчивая zzz. Вы можете уменьшить или увеличить размер этого массива, увеличив или уменьшив число {a..z} - и вы можете заменить его заглавными буквами или какой-либо другой простой последовательностью.

i - это счетчик, который мы увеличиваем, чтобы мы могли получить уникальную последовательность для каждого значения REF.

Я отмечаю, что мне не нравится фрагмент кода "FILENAME in *", потому что он не будет хорошо работать с подкаталогами. Я был бы склонен заменить эту строку

for FILENAME in `find . -type f`

обрабатывать файлы, включая подкаталоги, или

for FILENAME in `find . -maxdepth 1 -type f`

для файлов только в текущем каталоге (т.е. не рекурсивно, а игнорируя каталоги)

0

Вы можете создать команду, приспособленную к этой конкретной проблеме, я уверен, что другие ответы сделают это. Мой ответ носит более общий характер, возможно, он вам подойдет.

vidir (скорее всего из пакета moreutils ) позволяет редактировать имена файлов в текстовом редакторе. Чтобы выбрать редактор, установите переменную EDITOR .

Таким образом, вы можете использовать многие функции vi , emacs или любого другого редактора, который вы используете. Прочитайте man vidir чтобы узнать, как заставить его работать с подкаталогами, если вам нужно.

Это пример того, как это будет выглядеть в вашем редакторе:

1   ./AdbeRdr9.5.5-1_i486linux_enu.bin
2   ./AdobeAIRInstaller.bin
3   ./Dir1
4   ./Dir10
5   ./Dir2
6   ./bashfile.sh

Номера идентифицируют файлы в данном конкретном экземпляре vidir , за ними следуют вкладки. Вы не можете коснуться этих цифр и вкладок, если не знаете, что делаете. Изменения в именах файлов применяются при сохранении текста.

Если вы боитесь, что где-то есть имя файла с символом табуляции или символом новой строки, и это что-то сломает, сохраняйте спокойствие. Насколько я знаю, vidir в первую очередь откажется работать с ним.

Теперь лучшая часть. Редактор также может работать вне консоли, поэтому возможно:

  1. Вызвать EDITOR=kate vidir , это запустит редактор kate .
  2. Скопируйте весь текст и вставьте в LibreOffice Calc; вы получите две колонки.
  3. Управляйте именами, используя инструменты, предоставляемые Calc, чтобы получить выходные данные в виде двух столбцов: числа и новые имена.
  4. Скопируйте эти два столбца обратно в kate и замените старый текст.
  5. Сохраните текстовый файл.

Это очень сильно. Удаление строк и сохранение текстового файла приведет к удалению файлов. Обмен номерами заставит файлы менять имена (или даже пути, если вы работаете с подкаталогами). С большой властью приходит большая ответственность. Возможно, вам следует сначала поэкспериментировать с расходными файлами и каталогами.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .