Mac OS X'te bir klasörün / dosyanın gizli olup olmadığını söyleme


10

Ben ayarlayabilir veya yaparak bir klasör / dosya gizli bayrağı unset biliyorum chflags hidden foo.txtve chflags nohidden foo.txt.

Ancak, klasörün / dosyanın şu anda gizli olup olmadığını söylemek için yine de var mı?

Sadece klasör / dosyanın bir nokta ile başlayıp başlamadığını belirlemek istemiyorum.

Yanıtlar:


10

Göre ls man sayfasında , sen gerekir -Okombine opsiyon -lls ile bayraklar görüntülenmesi seçeneğiyle. Örneğin:

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

Düzenleme: Sadece OP ne istediğine daha spesifik bir çözüm vermek için (aşağıdaki açıklamalara bakın): Bir klasörün gizli olup olmadığını -agörmek için, klasörün kendisini görüntülemek için ls seçeneğini geçebiliriz . Daha sonra bu çıkışın gerekli hattını elde etmek için çıkışı boruya bağlayabilirizsed -n 2p (teşekkürler Stack Overflow ). Bir örnek:

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

Düzenleme 2: Bir dosya ya da klasör olsun, çalışması gereken bir komut için, biraz daha hacky bir şey yapmamız gerekir.

Gerekli çıktı satırı, ls -alklasörler toplam sayıyı gösterirken, dosyalar göstermediğinden, öğenin dosya veya klasör olmasına bağlı olarak değişir. Bunu aşmak için, karakter için grep olabilir r. Bu, tüm dosyalarda / klasörlerde olmalıdır (neredeyse hepsinde en az bir okuma izni olmalıdır), ancak toplamlar satırında olmamalıdır.

head -n 1Almak istediğimiz çizgi ilk çizgi olduğunda, ilk çizgiyi almak için kullanabiliriz (sed'i tercih ederseniz, alternatif sed -n 1pkullanılabilir).

Yani, örneğin bir dizinle:

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 .

ve bir dosya ile:

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

Edit 3: Selamlamaktan daha güzel bir yol için aşağıdaki Tyilo'nun cevabına bakın r:)


Ancak bunu bir klasörle yapmak, altındaki dosya / klasörlerin bayraklarını listeleyecektir
Tyilo

ls -Ol fooDir/ | grep hiddenYalnızca gizli dosyaları görüntülemek için, yalnızca gizli dosyaları / klasörleri görüntülemek üzere grep (örn. ) Yoluyla ekleyin . Bu yine de tüm dosyaları gösterecektir, ancak eğer bir sed / awk büyüsü (başka birisinin burada yardım etmek zorunda kalacağından korkuyorum) ile pipel yaparsanız, sadece bir dosya listesi elde edebilmeniz gerekir.

Bilmek istediğim dosyaların bir listesini istemiyorum "foo" klasörü gizli ya da değil
Tyilo

Tamam. Dizin kendisini görüntülemek için -aseçeneği ls ekleyin . Çıktıdan ihtiyacınız olan hattı almak için sed'i kullanabilirsiniz. Örneğin: ls -aOl foo | sed -n 2p. Bu bir çıkış satırı görüntüler. Eğer "gizli" kelimesini içeriyorsa, foo gizlidir. Yoksa, foo gizli değildir. :)

2
Kullanmak ls -Old dirname/size dizinin içeriğini değil içeriğini gösterir.
Bahama

7

Çözümü burada buldum : ls'nin alt dosyaları veya klasör içerikleri hakkında bilgi değil, yalnızca belirtilen dizin hakkında bilgi göstermesini nasıl sağlayabilirim?

Hangi temelde ls -ldO foove sonra sadece | awk '{ print $5 }'bilgi görüntülemek yapmak için ekleyin .


1
Kullanıcı adında veya grup adında boşluk varsa (ki bu son derece olası olmamalı, ancak hey) awk'ın kırılacağını unutmayın. Kullanan daha güvenli bir çözüm ekledim stat.
mrm

1

Tarafından başvurulan gibi @Tyilo , @Sorpigal çalışıyor önerir statkodlar ile "kullanıcı bayrakları" hangi %Xf(o x kullanıcıyı kodlanmış f lag) ve makine çözümlemesi için çok daha güvenlidir.

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

Kullanıcı Bayraklar için onaltılık değerleri burada yaşıyor: grep UF /usr/include/sys/stat.h. MacOS 10.11'den itibaren:

#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 */
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.