Intereting Posts
Отправка сценария в TORQUE `qsub`: строки PBS до или после строки shebang? Debian ARM на ошибке сервера Chroot Mumble Как отправить электронное письмо самому себе на том же локальном компьютере (порт tcp 25) Попробуйте отключить вывод консоли, console = null не работает Предложения в закладки слишком медленны в Firefox Извлечение строки через утверждения grep regex NTFS монтирование с использованием fstab принудительно nosuid, nodev отправка электронной почты с реликвией, даже если Postfix не работает локально Ошибка ввода / вывода, когда rm / mkdir Как передать PID одного процесса другому процессу в том же сценарии оболочки? Могу ли я emacs автоматически отступать весь мой код после того, как все написано? Имя файла, начинающееся с – (тире) Использование find для поиска символических ссылок, указывающих на определенный шаблон файлов Является ли Ubuntu «шпионским ПО» в других * buntu тоже? GNU Make не игнорирует неудачную команду

Как выбрать определенные файлы в другом каталоге с помощью bash?

Я хочу перечислить (или удалить или выполнить некоторую другую операцию) определенные файлы в каталоге, например:

$ ls /opt/somedir/ aa bb cc aa.txt bb.txt cc.txt $ ls /opt/somedir/(aa|bb|cc) ## pseudo-bash :p aa bb cc 

Как я могу это достичь (без использования cd-in в каталоге)?

    Для этого используйте фигурные скобки:

     ls /opt/somedir/{aa,bb,cc} 

    Для получения дополнительной информации читайте о расширении скобки .

    В bash запустите shopt -s extglob (или поместите его в ~/.bashrc ), и вы можете использовать дополнительные шаблоны, которые предоставляют регулярные выражения с необычным синтаксисом (унаследованным от ksh). Вы можете использовать эти шаблоны и в ksh тоже, конечно, а также в zsh после setopt ksh_glob .

     $ shopt -s extglob $ ls /opt/somedir/@(aa|bb|cc|doesnotexist) /opt/somedir/aa /opt/somedir/bb /opt/somedir/cc 

    В zsh вы можете напрямую использовать (foo|bar) в качестве шаблона.

     % ls /opt/somedir/(aa|bb|cc|doesnotexist) /opt/somedir/aa /opt/somedir/bb /opt/somedir/cc 

    Обратите внимание, что команда вызывается с полным путем. Если вы хотите вызвать команду с коротким путем, вам нужно каким-то образом изменить каталог, и (cd /opt/somedir && somecommand aa bb cc) на сегодняшний день является самым простым способом.

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

    Например:

     find /opt/somedir -regex '.*[aa|bb|cc].*' -exec mv '{}' ~/backup \; 

    Обычно я использую -name вместо -regex поскольку он проще. Но регулярное выражение подходит для вашего случая использования. Вы должны запустить команду без -exec в первый раз, чтобы убедиться, что они фактически являются файлами, которые вы хотите переместить / удалить.

    Вы можете фильтровать, используя egrep :

     ls | egrep '(aa|bb|cc)' 

    Чтобы найти все текстовые файлы:

     ls | egrep '(aa|bb|cc).txt'