Перейменуйте файли в каталозі


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команди.


Не в останню чергу, цей інструмент спочатку написав Ларрі Уолл, тато Перла.


Це не видалить .pdfз імені файлу.
Вільям Еверетт

Пост редагували відповідно.
Жилль Кінот

5

Крім команди перейменування, ви можете виконати її безпосередньо в 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з імені файлу.
Вільям Еверетт

ви пробували? бо для мене це робить. Показано в редакції.
hmontoliu

Моє ліжко. Я думав, що це просто перетворить великі літери. Отримано.
Вільям Еверетт

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.
крила підводного човна

Версія для перейменування Debian за замовчуванням була б приблизно такою rename 's/PMC// *.txtіrename s/\.pdf// *.txt
William Everett

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.