1

Если есть какой-то определенный синтаксис, так что я могу cat все файлы в каталоге, кроме выбранных. Например, предположим, у меня есть ~ 1200 текстовых файлов, содержащих несколько строк, по 3 или 4 строки на файл, за исключением нескольких файлов:

readme.md
contrib.rst
licence.txt

которые длиннее Я хочу просмотреть содержимое всех файлов, кроме 3 (или, если возможно, больше) файлов, упомянутых выше.

Я попробовал следующую команду:

cat !{readme.md,contrib.rst,licence.txt}*.*

потому что я видел где-то использование cat следующим образом:

cat [!t][!m][!p]*.sh

Я думал, что, поскольку {a,b} означает набор в bash-скриптах, отрицая, что это должно работать. Конечно я был неправ.

4 ответа4

4

Попробуйте это с расширенной функцией сопоставления с образцом в bash:

shopt -s extglob
cat !(readme.md|contrib.rst|licence.txt)
2

Попробуйте это с помощью bash:

GLOBIGNORE="readme.md:contrib.rst:licence.txt"
cat *
unset GLOBIGNORE
1

Что ты уже пробовал?

Это всегда те же файлы, которые вы хотите пропустить.

В этом случае вы можете жестко закодировать их в команде. Например, что-то вроде
find ! -name readme.md -o ! -name contrib.rst -o ! -name licence.txt -exec cat {} \+

Теперь, если вам нужно что-то, что пропускает все файлы размером более 4 строк, не зная заранее их имен, решение, очевидно, станет более сложным. В этом случае, пожалуйста, отредактируйте свой пост.

1

Без изменения текущего параметра оболочки можно выполнить каждое предложение Cyrus в подоболочке

(GLOBIGNORE="readme.md:contrib.rst:licence.txt" ; cat *)

так же как

(shopt -s extglob; cat !(readme.md|contrib.rst|licence.txt))

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .