Я хочу перечислить все мои файлы в каталоге во FreeBSD 9.2, но я не хочу включать конкретный каталог. Я проверил параметры -I и --ignore для ls , но I игнорирую только режим суперпользователя и --ignore не поддерживается.

У кого-нибудь есть идея, как использовать ls или сделать это с помощью другой команды (например, grep)?

2 ответа2

1

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

#!/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"
0

Если вы хотите перечислить все файлы, кроме тех, которые находятся в определенном каталоге, скажем, 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 команду run, которую хотите, вместо того, чтобы пытаться обрабатывать вывод отдельно, например:

find . -path ./notHere -prune -o -type f -exec ls -ll {} +

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