Повідомлення про "прихований" прапор файлу


12

Чи можна 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.

Відповіді:


8

Це кроки для отримання ОС 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.xcodeprojXcode і виберіть для створення lsцілі.

    Знімок екрана

  5. Виберіть file_cmdsпроект Xcode зліва та виберіть lsціль у головній області. В Побудувати Налаштування вкладки, шукати Header Search Paths в Headers категорії і додати шлях до папки , в якій ви витягли 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.