2012-04-08 3 views
8

У меня есть файлы a1 a2 a3 b1 b2 b3, и мне нужно исключить a2 и b2 из списка, используя только команду ls.UNIX 'ls' command exclude wildcard

+0

Когда я печатаю Ls --ignore = "* 2", он работает, но (если у меня есть другие файлы), когда я набираю ls -a * -b * --ignore = "* 2", файлы не исключаются – user1078719

ответ

5

Попробуйте это:

$ ls [a-b][13] 
a1 a3 b1 b3 

Или

$ shopt -s extglob 
$ ls !(*2) 
a1 a3 b1 b3 
2

Просто список файлов, которые вы хотите:

ls a1 a3 b1 b3 
+1

+1, так как это единственный способ удовлетворить ограничение «используя только ls». Любая попытка манипулировать списком аргументов с помощью shell globs используется оболочкой. (Хотя, вы используете оболочку для exec ls, поэтому, возможно, это конкретное ограничение является некорректным.) –

+0

@WilliamPursell, мои мысли точно. –

2

Попробуйте с Лс Grep

ls -1 | grep -viw "a2\|b2" 

Обратите внимание после того, как Ls пута 1 (номер один), а не буква "л". Иногда шрифт делает их запутанными.

14

вариант использования --ignore

ls --ignore=[ab]2 
+2

Но на какой версии 'ls' работает опция' --ignore'? На моем MAC его не существует. – dash1e

+0

GNU Coreutils 8.5 – bouzuya

+0

Я использую Fefora13, если это помогает. – user1078719