Как переименовать файлы в каталоге, таком как следующий файл: 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
из имени файла.