Як перейменувати файли в каталозі, такому як наступний файл: 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підказки. Це дуже корисно, ви можете покласти трохиперлкод, як я роблю в заміну.
Ви можете зняти -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команди.
Не в останню чергу, цей інструмент спочатку написав Ларрі Уолл, тато Перла.
Крім команди перейменування, ви можете виконати її безпосередньо в bash (лише один із способів багатьох):
for file in *pdf.txt; do mv $file ${file//[A-Z.]}.txt ; done
Відредаговано, щоб показати Pinyaka, як це працює:
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з імені файлу.