web-dev-qa-db-ja.com

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

Mac OSXでlshiddenファイルフラグを認識させることは可能ですか?

現在、単純な_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ファイルフラグの付いたファイル、および本当に名前がドット。

方法はありますか?エイリアスまたは信頼性の高いシェル関数を使用して、lshiddenフラグ付きファイルと_.dothidden_ファイルを同じように処理するようにします。つまり、デフォルトで非表示にし、_ls -A_または_ls -a_、_defaults read com.Apple.Finder AppleShowAllFiles_の値に応じてFinderがどのように動作するかと同様ですか?

_man chflags_がhiddenフラグについて具体的に言及しているのは、GUI、つまりFinderからのみ非表示になっていることを知っています。

12
Daniel Beck

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

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

    Screenshot

  5. 左側のfile_cmds Xcodeプロジェクトを選択し、メインエリアでlsターゲットを選択します。 ビルド設定タブで、ヘッダー検索パスHeadersカテゴリを作成し、libutilを抽出したフォルダへのパスを追加します。

    Screenshot

  6. 左側のlsフォルダーにあるファイルprint.cを開き、#include <membershipPriv.h>という行を削除します。後でファイルを保存します。このshouldは何かを壊すはずです。なぜなら、インクルードには理由があるからですが、それが何であるかはまだわかりません。

  7. 同じフォルダにあるファイルls.cを開き、display関数で/* Only display dot file if -a/-A set. */というコメントを探します。それとその下の状態を次のように置き換えます。

    /* 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 構築する。

    Success!

  9. 左側(フォルダリストの最後)でProductsを選択し、lsを右クリックします。 Finderに表示を選択します。

    Build Output folder screenshot

  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
8
Daniel Beck