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

Я не бегло говорю на sed, но легко сделать так в awk:

awk '/bar/{getline;next} 1' foo.txt 

awk чтения сценария: для строки, содержащей панель, получите следующую строку (getline), затем пропустите всю последующую обработку (затем). 1 шаблон в конце печатает остающиеся строки.

Обновление

Как указано в комментарии, вышеупомянутое решение не работало с последовательным bar. Вот пересмотренное решение, которое принимает его во внимание:

awk '/bar/ {while (/bar/ && getline>0) ; next} 1' foo.txt 

Мы теперь продолжаем читать для пропуска всех/bar/строк.

9
29.10.2013, 21:27
6 ответов

С 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 (переключатель режимов пробного прогона), когда Ваши тесты становятся valids.

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

Если Вы выполняете следующую команду (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 команда.


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

9
27.01.2020, 20:05
  • 1
    Это не удалит .pdf от имени файла. –  William Everett 29.10.2013, 18:39
  • 2
    Сообщение отредактировано соответственно. –  Gilles Quenot 29.10.2013, 18:40

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

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

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

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

4
27.01.2020, 20:05
  • 1
    я не делаю вещи, там GNU rename. Существует один от util-linux, и один от perl с другим синтаксисом. Тот, к которому Вы обращаетесь, похож на тот от util-linux это иногда называют rename.ul чтобы не быть перепутанным с rename от perl, в то время как в некоторых других системах, rename тот от util-linux и тот от perl назван prename. –  Stéphane Chazelas 29.10.2013, 17:36
  • 2
    Мой - тот от util-linux. Я по ошибке думал, что это была часть GNU coreutils. –  wingedsubmariner 29.10.2013, 17:40
  • 3
    Версия Debian по умолчанию переименовывает, было бы что-то вроде этого rename 's/PMC// *.txt и rename s/\.pdf// *.txt –  William Everett 29.10.2013, 18:05

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

 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
4
27.01.2020, 20:05
  • 1
    Это не удалит .pdf от имени файла. –  William Everett 29.10.2013, 18:22
  • 2
    Вы попробовали его? потому что для меня это делает. Показанный в редактировании. –  hmontoliu 29.10.2013, 18:41
  • 3
    Мое плохое. Я думал, что это просто преобразует прописные буквы. Upvoted. –  William Everett 29.10.2013, 18:44

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

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

j=${i//\.pdf/} средства занять место .pdf в $i ни с чем. Аналогично со вторым j присвоением, избавляющимся от PMC.

0
27.01.2020, 20:05

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

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

(zmv потенциал дескрипторов конфликтует корректно).

0
27.01.2020, 20:05

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

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.

1
27.01.2020, 20:05

Теги

Похожие вопросы