11

Можно ли ls о hidden флаге файла в Mac OS X?

В настоящее время простой ls -lO производит:

$ ls -lO
total 0
drwxr-xr-x@  84 danielbeck  staff  -      2856 29 Mai 22:44 Applications
drwx------+ 158 danielbeck  staff  -      5372 29 Mai 15:27 Desktop
drwx------@ 250 danielbeck  staff  -      8500 30 Mai 20:40 Documents
drwx------+  11 danielbeck  staff  -       374 29 Mai 22:21 Downloads
drwx------@  84 danielbeck  staff  -      2856 29 Mai 22:48 Library
drwx------@   3 danielbeck  staff  hidden  102  3 Apr 20:45 Movies
drwx------@   5 danielbeck  staff  hidden  170  3 Apr 20:45 Music
drwx------+ 215 danielbeck  staff  -      7310 29 Mai 22:54 Pictures
drwxr-x---@   7 danielbeck  staff  hidden  238  3 Apr 20:45 Public
drwxr-xr-x@   4 danielbeck  staff  hidden  136 24 Apr 23:25 Sites

Таким образом, у нас есть три вида видимости: обычные видимые файлы, файлы с флагом hidden файлов, которые на самом деле не скрыты в Терминале, и действительно скрытые файлы, имена которых начинаются с точки.

Есть ли способ, например, использовать псевдоним или надежную функцию оболочки, чтобы ls обрабатывал hidden помеченные и .dothidden файлы одинаково, то есть скрывал по умолчанию и показывал с помощью ls -A или ls -a , подобно тому, как Finder ведет себя в зависимости от значение по defaults read com.apple.Finder AppleShowAllFiles?

Мне известно, что man chflags специально упоминает hidden флаг, который скрывается только от GUI, то есть от Finder.

1 ответ1

8

Это шаги для получения OS X ls которая скрывает файлы со скрытым флагом, если не указана опция -a/-A , аналогично точечным файлам.

  1. Установите Xcode. Я использую Xcode 4.5.1 ниже.
  2. Загрузите libutil и file_cmds выпуска вашей ОС с http://www.opensource.apple.com. С правой стороны каждой записи списка пакетов есть кнопка загрузки. Это руководство было написано для OS X 10.8.2, YMMV с точными шагами ниже, если вы используете другую версию.
  3. Распакуйте оба архива.
  4. Откройте file_cmds.xcodeproj в Xcode и выберите для создания цели ls .

    Скриншот

  5. Выберите проект Xcode file_cmds слева и выберите цель ls в основной области. На вкладке « Настройки сборки » найдите пути поиска по заголовкам в категории « Заголовки » и добавьте путь к папке, в которую вы распаковали libutil .

    Скриншот

  6. Откройте файл print.c в папке ls слева и удалите строку с надписью #include <membershipPriv.h> . Сохраните файл позже. Это должно что-то сломать, потому что включения есть по причине, но я еще не определил, что это такое.

  7. Откройте файл ls.c в той же папке и найдите комментарий, говорящий /* Only display dot file if -a/-A set. */ в функции display . Замените его и приведенное ниже условие следующим текстом:

    /* Only display dot file and file with hidden flag if -a/-A set. */
    sp = cur->fts_statp;
    if (((sp != NULL && (sp->st_flags & 0x8000)) || cur->fts_name[0] == '.') && !f_listdot) {
        cur->fts_number = NO_PRINT;
        continue;
    }
    
  8. Нажмите Cmd - B, чтобы построить.

    Успех!

  9. Выберите Товары слева (конец списка папок) и щелкните правой кнопкой мыши ls . Выберите Показать в Finder .

    Скриншот папки «Создать выходной файл»

  10. Переместите исполняемый файл ls куда угодно, например, в свой домашний каталог. Затем откройте Terminal и запустите sudo mv $HOME/ls /bin/ls или, что еще лучше, создайте новую папку с именем bin в вашем домашнем каталоге и переместите ее туда. Добавьте эту папку в вашу PATH впоследствии.

Тестирование результата:

$ mkdir test
$ cd test
$ touch foo bar
$ chflags hidden bar
$ /bin/ls -lO
total 0
-rw-r--r--@ 1 danielbeck  staff  hidden 0 25 Okt 22:25 bar
-rw-r--r--  1 danielbeck  staff  -      0 25 Okt 22:25 foo
$ $HOME/bin/ls -lO
total 0
-rw-r--r--  1 danielbeck  staff  - 0 25 Okt 22:25 foo
$ $HOME/bin/ls -A
bar foo

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