[unix] Mac OS X에서 폴더 / 파일이 숨겨져 있는지 확인

나는 당신이 설정하거나 수행하여 폴더 / 파일의 숨겨진 플래그 설정을 해제 할 수 있습니다 알고 chflags hidden foo.txtchflags nohidden foo.txt.

그러나 폴더 / 파일이 현재 숨겨져 있는지 여부를 알려주는 방법이 있습니까?

폴더 / 파일이 점으로 시작하는지 확인하고 싶지 않습니다.



답변

ls 매뉴얼 페이지 에 따르면 ls로 플래그를 보는 옵션 -O과 옵션을 결합 할 수 있어야합니다 -l. 예를 들면 다음과 같습니다.

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 2p( 스택 오버플 로 감사)에 파이프하여 해당 출력 의 필수 라인을 얻을 수 있습니다. 예를 들면 :

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. 이 파일은 ~ 모든 파일 / 폴더에 있어야하며 (거의 모든 파일에는 최소한 하나의 읽기 권한이 있어야 함) totals 행에는 없습니다.

우리가 얻고 자하는 행이 첫 번째 행이되므로 첫 번째 행 head -n 1을 얻는 sed -n 1p데 사용할 수 있습니다 ( sed를 선호하는 경우 다른 방법을 사용할 수 있음).

따라서 예를 들어 디렉토리를 사용하십시오.

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🙂


답변

여기에서 해결책을 찾았습니다. ls가 하위 파일이나 폴더 내용에 대한 정보가 아닌 지정된 디렉토리에 대한 정보 만 표시하도록하려면 어떻게해야합니까?

기본적으로 정보가 표시되도록 ls -ldO foo추가 | awk '{ print $5 }'하십시오.


답변

에서 참조로 @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 */


답변