lsに「隠された」ファイルフラグを認識させる


11

Mac OS Xでファイルフラグをls認識させることは可能hiddenですか?

現在、単純なもの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

したがって、3種類の可視性があります。通常の可視ファイル、hidden実際にはターミナルで非表示にならないファイルフラグのあるファイル、およびドットで始まる名前の実際に非表示のファイルです。

方法は作るために、エイリアスまたは信頼性の高いシェル関数を使用して、例えばそこにあるls御馳走をhiddenフラグを付け.dothidden、デフォルトでは同じ、すなわち非表示をファイルとして表示しls -Aたりls -a、Finderがの値に応じてどのように動作するかに似てdefaults read com.apple.Finder AppleShowAllFiles

フラグはGUIから非表示、つまりFinderのみにman chflags特に言及していることを認識していますhidden

回答:


8

これらは、ドットファイルと同様に、オプションが指定されていない限り、非表示フラグでlsファイルを非表示にするOS Xを取得する手順です。-a/-A

  1. Xcodeをインストールします。以下のXcode 4.5.1を使用しています。
  2. お使いのOSリリースのダウンロードlibutilfile_cmdsからhttp://www.opensource.apple.com。各パッケージリストエントリの右側にダウンロードボタンがあります。このガイドはOS X 10.8.2、YMMV向けに書かれており、異なるバージョンを使用している場合の正確な手順は以下のとおりです。
  3. 両方のアーカイブを抽出します。
  4. file_cmds.xcodeprojXcodeを開き、lsターゲットのビルドを選択します。

    スクリーンショット

  5. 選択しfile_cmds、左のXcodeプロジェクトを、そして選択lsメインエリアにターゲットを。ではビルドの設定 ]タブ、探しヘッダ検索パスヘッダカテゴリとあなたが抽出された場所にフォルダへのパスを追加しますlibutil

    スクリーンショット

  6. 左側print.clsフォルダーでファイルを開き、という行を削除します#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。[ ファインダーに表示]を選択ます。

    ビルド出力フォルダーのスクリーンショット

  10. ls実行ファイルを便利な場所、たとえばホームディレクトリに移動します。次に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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.