Переименовать файлы в каталоге


10

Как переименовать файлы в каталоге, таком как следующий файл: PMC21375.pdf.txtмне нужно переименовать в 21375.txt. т.е. мне нужно удалить оба PMCи pdfиз каждого имени файла.

Ответы:


9

С «s rename:

rename 's/(PMC|\.pdf)//g' *pdf.txt 

Демо:

$ ls *txt
PMC21375.pdf.txt
$ rename -n 's/(PMC|\.pdf)//g' *txt 
PMC21375.pdf.txt -> 21375.txt

из shellподсказки. Это очень полезно, вы можете поместить некоторый код, как я, в подстановку.

Вы можете удалить -n(переключатель режима холостого хода), когда ваши тесты станут действительными.

предупреждение Существуют другие инструменты с таким же именем, которые могут или не могут сделать это, поэтому будьте осторожны.

Если вы запустите следующую команду ( linux)

$ file $(readlink -f $(type -p rename))

и у вас есть результат, как

.../rename: Perl script, ASCII text executable

тогда это кажется правильным инструментом =)

Если нет, чтобы сделать его по умолчанию (обычно уже так) Debianи производной, как Ubuntu:

$ sudo update-alternatives --set rename /path/to/rename

(заменить /path/to/renameпуть вашей perl's renameкоманды.


Наконец, что не менее важно, этот инструмент был первоначально написан Ларри Уоллом, отцом Perl.


Это не удалит .pdfиз имени файла.
— Уильям Эверетт

Сообщение отредактировано соответственно.
— Жиль Квено

5

Помимо команды переименования вы можете сделать это непосредственно в bash (только один из многих способов):

 for file in *pdf.txt; do mv $file ${file//[A-Z.]}.txt ; done

Отредактировано, чтобы показать Пиньяке, как это работает:

hmontoliu@ulises2:/tmp/foo$ touch PCM21375.pdf.txt PCM21376.pdf.txt
hmontoliu@ulises2:/tmp/foo$ ls
   PCM21375.pdf.txt  PCM21376.pdf.txt
hmontoliu@ulises2:/tmp/foo$ for file in *pdf.txt; do mv $file ${file//[A-Z.]}.txt ; done
hmontoliu@ulises2:/tmp/foo$ ls
   21375.txt  21376.txt

Это не удалит .pdfиз имени файла.
— Уильям Эверетт

ты пробовал это? потому что для меня это так. Показано в редактировании.
— hmontoliu

Виноват. Я думал, что это будет просто конвертировать заглавные буквы. Upvoted.
— Уильям Эверетт

4

Существует несколько утилит для переименования файлов, но одна из самых простых в использовании rename. В вашем случае вы, вероятно, можете сделать:

rename PMC '' *txt
rename .pdf '' *txt

Первый параметр - это часть имени файла, которую нужно заменить. Второй параметр - строка замены. Здесь я использую ''для представления пустой строки. Все следующие параметры являются файлами для переименования, здесь я использовал *txtдля ограничения замены текстовые файлы.

renameдолжен уже присутствовать, если вы работаете в Linux. Если вы используете * BSD или OS X, вам, возможно, придется сначала установить его.


Я не думаю, что есть GNU rename. Есть один из util-linuxи один perlс другим синтаксисом. Один вы ссылаетесь на внешний вид , как один из , util-linuxкоторый иногда называют rename.ulтак, чтобы не путать с renameс perl, в то время как на некоторых других системах, renameявляется один из Util-Linux и один из perlназываются prename.
— Стефан Шазелас

1
Мой тот из util-linux. Я ошибочно думал, что это было частью GNU coreutils.
— wingedsubmariner

Версия переименования Debian по умолчанию будет выглядеть примерно так rename 's/PMC// *.txtиrename s/\.pdf// *.txt
— Уильям Эверетт,

1

Сначала сделайте резервную копию ваших файлов! Тогда в основном вы можете использовать однострочник Python в текущем каталоге в общем виде:

python -c "import glob,os; [os.rename(fn, fn.replace('PATTERN', 'REPLACE')) for fn in glob.glob('PATH/*')]"

в вашем конкретном случае вы можете использовать это дважды:

python -c "import glob,os; [os.rename(fn, fn.replace('.pdf', '')) for fn in glob.glob('*')]"

удалить .pdfи снова:

python -c "import glob,os; [os.rename(fn, fn.replace('PMC', '')) for fn in glob.glob('*')]"

удалить PMC.


0

Попробуй это:

for i in *.pdf.txt; do j=${i//\.pdf/}; j=${j//PMC/}; mv $i $j; done

В j=${i//\.pdf/}средстве заменить .pdfв $iкорыте. Точно так же со вторым назначением j избавиться от PMC.


0

Если вы используете zsh, это типичная работа для zmv:

zmv 'PMC(*).pdf.txt' '$1.txt'

( zmvобрабатывает потенциальные конфликты изящно).

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.