Как переименовать файлы в каталоге, таком как следующий файл: PMC21375.pdf.txtмне нужно переименовать в 21375.txt. т.е. мне нужно удалить оба PMCи pdfиз каждого имени файла.
Как переименовать файлы в каталоге, таком как следующий файл: PMC21375.pdf.txtмне нужно переименовать в 21375.txt. т.е. мне нужно удалить оба PMCи pdfиз каждого имени файла.
Ответы:
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подсказки. Это очень полезно, вы можете поместить некоторый Perl- код, как я, в подстановку.
Вы можете удалить -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.
Помимо команды переименования вы можете сделать это непосредственно в 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из имени файла.
Существует несколько утилит для переименования файлов, но одна из самых простых в использовании rename. В вашем случае вы, вероятно, можете сделать:
rename PMC '' *txt
rename .pdf '' *txt
Первый параметр - это часть имени файла, которую нужно заменить. Второй параметр - строка замены. Здесь я использую ''для представления пустой строки. Все следующие параметры являются файлами для переименования, здесь я использовал *txtдля ограничения замены текстовые файлы.
renameдолжен уже присутствовать, если вы работаете в Linux. Если вы используете * BSD или OS X, вам, возможно, придется сначала установить его.
rename. Есть один из util-linuxи один perlс другим синтаксисом. Один вы ссылаетесь на внешний вид , как один из , util-linuxкоторый иногда называют rename.ulтак, чтобы не путать с renameс perl, в то время как на некоторых других системах, renameявляется один из Util-Linux и один из perlназываются prename.
rename 's/PMC// *.txtиrename s/\.pdf// *.txt
Сначала сделайте резервную копию ваших файлов! Тогда в основном вы можете использовать однострочник 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.
Попробуй это:
for i in *.pdf.txt; do j=${i//\.pdf/}; j=${j//PMC/}; mv $i $j; done
В j=${i//\.pdf/}средстве заменить .pdfв $iкорыте. Точно так же со вторым назначением j избавиться от PMC.
Если вы используете zsh, это типичная работа для zmv:
zmv 'PMC(*).pdf.txt' '$1.txt'
( zmvобрабатывает потенциальные конфликты изящно).
.pdfиз имени файла.