2016-10-06 5 views
0

Я хочу удалить .. и. запись на выходе ls. Как всегда, работаетКак я могу избавиться от ./ и ../ в выводе ls

ls . | sed '/^\.\./d;/^\.\//d' 

не работает для меня (./ все еще здесь), и я не могу понять, почему.

+0

BTW, ['ls' не является подходящим инструментом для программного использования] (http://mywiki.wooledge.org/ParsingLs); попытки использовать его вывод в вашем программном обеспечении * будут вызывать ошибки, если вы столкнетесь с интересными именами файлов или выполняетесь на платформе с поведением, которое отличается от того, где вы проводили тестирование. Если вы пытаетесь использовать его в интерактивном режиме, то, наоборот, https://superuser.com/ - это правильное место для вопросов, касающихся * использования * инструментов, а не их разработки. –

+1

'ls .' не отображает записи' .'. или '..'. Есть ли псевдоним для 'ls'? Какая у вас ОС? –

ответ

3

ls имеет -A вариант именно для этой цели:

ls -A 

От man ls:

-A, --almost-all 
       do not list implied . and .. 
+1

Примечательно, что это расширение BSD, не гарантированное POSIX. –

+1

@CharlesDuffy Доступно также и для систем GNU. – heemayl

+0

«Не гарантируется POSIX» должен был стать оперативным текстом. Да, существует множество перекрестных опытов между расширениями GNU и BSD. –

1

По умолчанию ls не печатает эти данные в первую очередь, ни какие-либо другие, чьи имена начинаются с .. Также он не печатает косые черты после имен каталогов. То, что ваша простая команда ls делает эти вещи, предполагает, что у вас есть псевдоним (скорее всего) или, возможно, функция оболочки с этим именем в вашей среде. Вы можете перечислить текущие псевдонимы в среде оболочки с помощью команды alias -p.

В любом случае, вы можете обойти псевдоним/функцию, не удаляя ее, используя абсолютный путь: /bin/ls. В случае псевдонима, по крайней мере, вы можете указать опцию -A для подавления . и .., но если эта (нестандартная) опция поддерживается значением, которое оно имеет для GNU и BSD ls, то оно не будет подавлять другие dotfiles (это может быть именно то, что вы хотите).