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


10

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

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

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

답변:


10

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:)


그러나 폴더로이 작업을 수행하면 그 아래에있는 파일 / 폴더에 대한 플래그가 나열됩니다.
Tyilo

숨겨진 파일 만 보려면 grep (예 :)을 통해 ls -Ol fooDir/ | grep hidden숨겨져 숨겨진 파일 / 폴더 만 봅니다. 이것은 여전히 ​​모든 파일을 표시하지만 sed / awk 마술을 통해 파이프하면 (다른 사람이 여기서 도움이 필요합니다) 파일 목록 만 얻을 수 있습니다.

방금 알고 싶은 파일 목록을 원하지 않습니다. "foo"폴더가 숨겨져 있는지 여부입니다
Tyilo

확인. 따라서 디렉토리 자체를 보려면 -als에 옵션을 추가하십시오 . 출력에서 필요한 라인을 얻으려면 sed를 사용할 수 있습니다. 예를 들면 다음과 같습니다 ls -aOl foo | sed -n 2p.. 한 줄의 출력이 표시됩니다. "hidden"이라는 단어가 포함되어 있으면 foo가 숨겨집니다. 그렇지 않으면 foo는 숨겨지지 않습니다. :)

2
사용 ls -Old dirname/하면 디렉토리 내용이 아닌 디렉토리 자체의 속성이 표시됩니다.
bahamat

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.