Команда rename не может обрабатывать [и (символы?

UPDATE: примечание об использовании опции regex locate и расширения имени файла оболочки в отношении аргументов locate ...

UPDATE Когда вы вводите locate /bin/b* (обратите внимание, что есть нет кавычек), происходит несколько вещей.

Во-первых, shell-имя-расширение расширяет расширение оболочки charecter * (это потому, что * незащищен, т. е. нет «двойных кавычек»). Результатом этого расширения является список имен файлов. который, возможно, очень длинный ... Этот список передается в locate как много отдельных команд командной строки. locate затем проверяет каждый из этих аргументов на каждый из файлов в своей базе данных и выводит совпадения.

Обратите внимание, что «locate» не имеет понятия текущего рабочего каталога. Это соответствует только вашим аргументам против полных имен файлов в его базе данных. Это означает, что он будет соответствовать как /bin/bash, так и /home/user/bin/brackets. У вас есть определенная степень контроля таким образом, но регулярное выражение locate поиск предлагает больше; как и некоторые другие варианты локации.

и Когда вы вводите locate -r "/bin/b.*", происходят разные вещи, чем с простыми args .. ( полностью квалифицированные просто список простых аргументов)

Во-первых, расширение файла shell расширяет расширение charecter оболочки оболочки * (это потому, что * не защищено, т. е. нет «двойных кавычек», ) Кавычки защищают * от расширения файла оболочки. Это означает, что * и точка. теперь shell имя_файла-расширение . В результате это расширение представляет собой список имен файлов. который, возможно, очень длинный ... Этот список передается в locate как много отдельных команд командной строки.

Сводка: «расширение оболочки оболочки» совершенно отличается от «regex»

Теперь вернемся к исходному сообщению:

locate обычно перечисляет всю базу данных в stdout, поэтому, чтобы ограничить ее конкретным каталогом, вам необходимо ее отфильтровать ... Вы можете сделать это с помощью опций локализации.

Вы можете использовать возможность регулярного выражения locate, а не просто shell-globbing ... (locate /dir/myfile* - это подшивка оболочки) ...

Из информации locate: -r, --regex

«... (regex) совпадения выполняются против всего имени пути, и поэтому по умолчанию путь будет сопоставлен, если какая-либо его часть совпадает с указанным регулярным выражением. используйте ^ или $ для привязки соответствия в начале или конце пути. "

примечание: -i = игнорировать кейс. , , , , -r = регулярное выражение. , , , , ~ / будет расширяться оболочкой в ​​/ home / user (когда ~ / не находится в кавычках). , , , , '\' (baskslash + space, no quotes) - буквальное пространство (чтобы избежать расширения оболочки). Вы можете поместить строку в кавычки, но не забудьте оставить параметр regex вне кавычек: ~/my\ regex или -/"my regex"

например. locate -ir ~/".*"la\ bella\ vita - это то же самое, что и locate -ir ~/".*la bella vita", и будет искать весь домашний каталог для «La Bella Vita», происходящий где угодно.

Вы также можете ограничить поиск только файлом '\' , но с помощью -b или --basename .. в этом случае регулярное начало строки [ f20] применяется только к базовому имени ...

Я чаще всего использую locate -bir

PS .. Locate настолько быстр, что я никогда не использовал find ... и я не использовал nautilus search (слишком медленно)

С помощью «locate», если вы ищете что-то новое, просто запустите sudo updatedb, чтобы обновить базу данных locate ... ( но если вы его недавно добавили, вы, вероятно, знаете, где это:) ....

1
задан 11 June 2015 в 20:57

1 ответ

Ubuntu из rename написан на Perl. Это требует регулярного выражения Perl. "[" экранировано с помощью \ ".

# remove one pair
rename -n 's/\[(.*)\]/$1/' *

# remove all [ and ]
rename -n 's/\[|\]//g' *
0
ответ дан 23 May 2018 в 19:55

Другие вопросы по тегам:

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