Mac OS Xでフォルダー/ファイルが非表示になっているかどうかを確認する


10

私はあなたがやってフォルダ/ファイルの隠されたフラグを設定または設定解除することができます知っているchflags hidden foo.txtchflags nohidden foo.txt

しかし、とにかくフォルダ/ファイルが現在隠されているかどうかを伝える方法はありますか?

フォルダー/ファイルがドットで始まっているかどうかを判断したくありません。

回答:


10

lsのmanページによる-Oと、-lオプションをlsでフラグを表示するオプションと組み合わせることができるはずです。例えば:

ls -Ol foo.txt
-rw-r--r-- 1 harry staff - 0 18 Aug 19:11 foo.txt
chflags hidden foo.txt
ls -Ol foo.txt
-rw-r--r-- 1 harry staff hidden 0 18 Aug 19:11 foo.txt
chflags nohidden foo.txt
ls -Ol foo.txt
-rw-r--r-- 1 harry staff - 0 18 Aug 19:11 foo.txt

編集:OPが求めているものに対してより具体的なソリューションを提供するために(以下のコメントを参照):フォルダーが非表示かどうかを確認するには、-aオプションをlsに渡してフォルダー自体を表示できます。次に、出力をパイプ処理してsed -n 2pStack Overflowに感謝)、その出力に必要な行を取得できます。例:

mkdir foo
chflags hidden foo
ls -aOl foo | sed -n 2p
drwxr-xr-x@ 2 harry staff hidden 68 18 Aug 19:11 .

編集2:ファイルであろうとフォルダーであろうと関係なく機能するコマンドの場合、もう少しハックする必要があります。

からの出力に必要な行ls -alは、フォルダーが合計数を表示するのに対し、ファイルは合計数を表示しないため、ファイルかフォルダーかによって異なります。これを回避するには、文字をgrepしますr。これは、すべてのファイル/フォルダーの〜allにあるはずです(ほぼすべてに少なくとも1つの読み取りアクセス許可が必要です)が、totals行にはありません。

取得したい行が最初の行になるので、を使用head -n 1して最初の行を取得できます(代わりに、sedをsed -n 1p使用したい場合は使用できます)。

したがって、たとえばディレクトリの場合:

mkdir foo
chflags hidden foo
ls -aOl foo | grep r | head -n 1
drwxr-xr-x@ 2 harry staff hidden 68 18 Aug 19:11 .

そしてファイルで:

touch foo.txt
chflags hidden foo.txt
ls -aOl foo.txt | grep r | head -n 1
-rw-r--r-- 1 harry staff hidden 0 18 Aug 19:11 foo.txt

編集3:greppingよりも良い方法については、以下のTyiloの回答を参照してくださいr:)


しかし、これをフォルダーで実行すると、その下にあるファイル/フォルダーのフラグが一覧表示されます
Tyilo

隠しファイルだけを表示するには、grep(egなどls -Ol fooDir/ | grep hidden)にパイプして、隠しファイル/フォルダのみを表示します。これでもすべてのファイルが表示されますが、sed / awkマジックを介してそれをパイプ処理すると(他の誰かが私が恐れているここで助けなければならないでしょう)、ファイルのリストだけを取得できるはずです。

私は非表示にしたりされていない、私はちょうど知りたいファイルのリストは、「foo」というフォルダですしたくない
Tyilo

OK。したがって、ディレクトリ自体を表示するには、-aオプションをlsに追加します。出力から必要な行を取得するには、sedを使用できます。次に例を示しますls -aOl foo | sed -n 2p。これにより、1行の出力が表示されます。「hidden」という単語が含まれている場合、fooは非表示になります。そうでない場合、fooは隠されません。:)

2
を使用ls -Old dirname/すると、コンテンツではなく、ディレクトリ自体のプロパティが表示されます。
バハマ

7

ここに解決策が見つかりました:lsに、サブファイルやフォルダーの内容に関する情報ではなく、指定されたディレクトリに関する情報のみを表示させるにはどうすればよいですか?

これは基本的には、情報を表示するためにls -ldO foo追加| awk '{ print $5 }'するだけです。


1
ユーザー名またはグループ名に空白があると、awkが壊れることに注意してください(これは非常にありそうもないはずですが、ちょっと)。を使用するより安全なソリューションを追加しましたstat
mrm

1

参照されるよう@Tyilo@Sorpigalはしようとすることを提案statして、「ユーザーフラグを」コードする、%Xf(彼はX符号化されたユーザーをfの遅れ)、及び機械の解析のためにはるかに安全です。

$ stat -f "%Xf" ~/Library
8000

ユーザーフラグの16進値は、ここにありますgrep UF /usr/include/sys/stat.h。macOS 10.11以降:

#define UF_SETTABLE     0x0000ffff  /* mask of owner changeable flags */
#define UF_NODUMP       0x00000001  /* do not dump file */
#define UF_IMMUTABLE    0x00000002  /* file may not be changed */
#define UF_APPEND       0x00000004  /* writes to file may only append */
#define UF_OPAQUE       0x00000008  /* directory is opaque wrt. union */
/* #define UF_NOUNLINK  0x00000010 */   /* file may not be removed or renamed */
#define UF_COMPRESSED   0x00000020  /* file is hfs-compressed */
/* UF_TRACKED is used for dealing with document IDs.  We no longer issue
   notifications for deletes or renames for files which have UF_TRACKED set. */
#define UF_TRACKED      0x00000040
#define UF_HIDDEN       0x00008000  /* hint that this item should not be */
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.