
Я хочу перечислить все мои файлы в каталоге в FreeBSD 9.2, но не хочу включать конкретный каталог. Я проверил оба параметра -I
и для , но игнорирует только режим суперпользователя и не поддерживается.--ignore
ls
I
--ignore
Есть ли у кого-нибудь идеи, как ls
это сделать с помощью другой команды (например grep
, )?
решение1
Если вы хотите вывести список всех файлов, за исключением тех, которые находятся, скажем, в определенном каталоге, notHere
вы можете использовать find
команду, чтобы сделать это следующим образом:
find . -path ./notHere -prune -o -type f -print
Объяснение:
.
: каталог, в котором нужноfind
начать-path ./notHere
: запустить правило, которое будет соответствовать пути./notHere
-prune
: запретитьfind
переход в каталог с текущим совпадением-o
: добавьте ,or
чтобы указать, что мы хотим сделать, если первое правило не совпало-type f
: соответствовать только файлам, а не, скажем, каталогам (удалите это, если хотите видеть также записи каталогов)-print
: часто не требуется, так как это действие по умолчанию, но некоторые версииfind
все еще хотят, чтобы вы явно указали, что хотите, чтобы результат был распечатан
Вы упоминаете, что хотите получить другой вывод (в частности ls -ll
), а не просто список имен файлов. find
часто имеет встроенную функцию, которая поможет с этим, хотя и не те конкретные параметры ls
. Вы можете заменить -print
флаг выше на и посмотреть , достаточно ли близок вам -ls
этот набор параметров:ls
find . -path ./notHere -prune -o -type f -ls
или если этого недостаточно, вы могли бы find
выполнить нужную команду вместо того, чтобы пытаться обрабатывать вывод отдельно, например:
find . -path ./notHere -prune -o -type f -exec ls -ll {} +
решение2
Я использую этот скрипт для фильтрации всех папок с именами, начинающимися с '_'. Он, вероятно, не будет работать с папками, в которых есть пробелы, но вы можете его изменить.
#!/bin/sh
A=`ls /j/ | xargs | sed 's/_[a-z0-9]*//g' | awk '{$1=$1;print}'`
W=`echo $A | wc -w | tr -d '[[:space:]]'`
echo $W
В целом интересна следующая часть:
ls some_folder | xargs | sed 's/_[a-z0-9]*//g'
Регулярное выражение _[a-z0-9]*
содержит шаблон для сопоставления с именем, которое следует исключить.
Это если вы хотите получить список папок без -a
опции (только имена). Если вы хотите использовать, -a
то самый простой вариант:
ls -la | grep -v skip_folder
где skip_folder
имя, которое вы хотите исключить. Используйте кавычки, если папка содержит пробелы, например:
ls -la | grep -v "skip folder"