Удалите пробел в именах файлов в каталоге

Единственным путем я знаю, должен запустить приложение GUI с корнем (sudo) полномочия. Так, если Вы делаете что-то как sudo dolphin или независимо от того, что Ваш предпочтительный файловый менеджер, чем тогда, когда Вы нажимаете на 'неизвестный' тип файла, и установка предложена, Вам уже наследовали полномочия пользователя root от окна файлового менеджера. Однако под управлением файловые менеджеры GUI с полномочиями пользователя root не рекомендуются из соображений безопасности.

Или, Вы могли запустить свой установщик GUI непосредственно с sudo, как sudo your_gui_package_manager_application (т.е. sudo sulfur если Вы находитесь на Sabayon).

Я не уверен, но я думаю, что можно/выполнить sudo что-то непосредственно от любимого средства запуска (Gnome - делают, krunner, весь-начинающий, и т.д.).

3
10.04.2013, 04:34
2 ответа

В zsh это, легко покончили zmv функция. Поместить autoload -U zmv в Вашем ~/.zshrc, или выполненный это однажды в Вашей оболочке, затем:

zmv '* .pdf' '${f// /}'

Это удаляет все пробелы из имени файла. Если Вы только хотите удалить тот перед .pdf расширение:

zmv '* .pdf' '${f# .pdf}.pdf'

или использование круглых скобок для разграничивания групп, которые могут использоваться в качестве обратных ссылок:

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

Если Вы хотите действовать в подкаталогах также:

zmv '**/* .pdf' '${f# .pdf}.pdf'

или (отмечают, что необходимо использовать (**/), нет (**)/):

zmv '(**/)(*) .pdf' '$1$2.pdf'

В соответствии с Linux, с или без zsh, если существует только это побочное пространство в именах файлов:

rename \ .pdf .pdf *\ .pdf

или, если существует только это пространство в настоящих именах:

rename ' ' '' *\ .pdf

Если Вы хотите действовать в подкаталогах также в ksh93 ≥o + или колотить ≥4, можно использовать ** соответствовать файлам в подкаталогах. В ударе необходимо работать shopt -s globstar сначала (вставляет эту строку Ваш ~/.bashrc) и set -o globstar в ksh93.

rename \ .pdf .pdf **/*\ .pdf

Остерегайтесь тот удар следует за символьными ссылками при рекурсивном вызове каталогов.

Без преимущества **, можно использовать find рекурсивно вызывать.

find . -name '* .pdf' -exec rename ' .pdf' .pdf {} +

Под Debian и производными (включая Ubuntu) и большинство систем не-Linux та поставка с perl, rename команда является другой, которая берет выражение Perl в качестве аргумента вместо строки для замены и замещающая строка. Любое использование rename.ul в командах выше (под Debian и производными), или с Perl rename:

rename 's/ \.pdf$/.pdf/' -- *\ .pdf    # strip the space before the extension
rename 's/ //g' -- *\ .pdf             # strip all spaces
6
27.01.2020, 21:14
  • 1
    +1 для того, чтобы быть настолько полным и покрыть больше чем один инструмент. Все Ваши ответы невероятны, между прочим. Я изучил много от них за прошлые несколько месяцев. –   10.04.2013, 05:31
  • 2
    Обратите внимание что rename ... *\ .pdf перестанут работать, если будут файлы PDF, имя которых запускается с - если POSIXLY_CORRECT= находится в среде. Вам нужно -- для предотвращения его но это должно пойти перед аргументами неопции. –  Stéphane Chazelas 26.01.2014, 01:22

Это защитит от случайной перезаписи, если это будет важно.

IFS=$'\n'
for i in $(find . -name '* .pdf')
do
  mv -i "$i" "${i% .pdf}.pdf"
done

При выполнении этого в интерактивной оболочке, Вы могли бы хотеть выйти из нее сразу, так как Вы изменяете IFS.

0
27.01.2020, 21:14

Теги

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