Як ls, використовуючи довгий формат (-l), поки все ще слідує посилання каталогів?


27

Я помітив, що ls -lне змінюється лише форматування виводу, але й спосіб обробки посилань на каталог:

> ls /rmn
biweekly.sh  daily.sh  logs ...

> ls -l /rmn
lrwxrwxrwx 1 root root 18 Feb 11  2011 /rmn -> /root/maintenance/

Я хотів би отримати детальний перелік того, що є /rmn, а не інформацію про /rmnсимпосилання.

Я можу подумати над тим, щоб створити функцію оболонки, яка робить щось подібне:

cd /rmn
ls -l
cd -

Але це здається занадто хитким, тим більше, що це заплутує наступне використання cd -. Чи є кращий спосіб?

(Я перебуваю на CentOS 2.6.9)


Я також це помітив і пішов гугнути, щоб побачити, чи хтось теж помітив. Саме так я прийшов сюди. :)
Євген Афанасьєв

Відповіді:


27

Перевірте, чи є у вашого ls варіанти:

 -H, --dereference-command-line
     follow symbolic links listed on the command line 
 --dereference-command-line-symlink-to-dir
     follow each command line symbolic link that points to a directory

Якщо це не допомагає, ви можете змусити макроробота працювати, не псуючи cd -, виконуючи такі дії:

(cd /rmn ; ls -l)

який працює в підрозділі.


У нього є -H, і це зробило трюк. Дякую!
RomanSt

4
Дуже хочеться, щоб це --dereference-command-line-symlink-to-dirбуло короткою формою.
wchargin

14

Я не зовсім розумію, чому роздуми над цією простою проблемою мають бути настільки складними - але, можливо, я просто зрозумів це питання не так. У будь-якому разі: коли мені потрібен був подібний функціонал, я використовував:

ls -lL

Це і зробило трюк у моєму випадку. На lsчоловіковій сторінці:

-L, --dereference
     when showing file information for a symbolic link, 
     show  information  for  the file the link references
     rather than for the link itself

Наприклад, я створив /media/stickярлик для доступу до даних на USB-накопичувачі. ls -l /media/stickпокаже фактичне посилання, а вмістls -lL /media/stick буде показано на USB-накопичувачі.

Після деяких глибших досліджень про різницю між внутрішніми роботами -Hта -L, нарешті, я наткнувся на чудову статтю з цього приводу в блозі « Shallow Thoughts» (навіть із зображенням акуратних трюків із сценарієм оболонки для вашого задоволення!)

Це вказує на тонкі відмінності між двома параметрами (набагато кращими, ніж оригінальний посібник!) Наступним чином:

  • -H - лише розвідка тих посилань, явно зазначених у командному рядку
  • -L- посилання відновлення, навіть якщо вони не вказані в командному рядку

(Коли ці двоє використовуються з простими повсякденними завданнями, взагалі не повинно бути різниці у виході.)

Крім того: Якщо ви віддаєте перевагу запам'ятати довгу форму ( --option), це, ймовірно, менш громіздке запам'ятовування, --dereferenceніж надмірно довге чудовисько --dereference-command-line-symlink-to-dir.


5
ls -l /rmn/

зробив би це чи

ls -l /rmn/.

Однак поведінка не повинна відрізнятися з і без -l. У вас є псевдонім ls?


3
lsпрапори божевільні. -lробить -Hза замовчуванням вимкнено, як це робить -F. Див. Основні програми - перелічені файли .
Мікель

@Mikel, здається, ви абсолютно праві. І так, це горіхи. (також у мене немає псевдоніма для ls, я намагався уникнути цього, але результати ті ж)
RomanSt

Адже це навіть визначено POSIX. Я був ls='ls -F'власне псевдонімом.
Стефан Хазелас
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.