dosyaları bash olarak tanımlamanın / etiketlemenin basit yolu


0

Böyle bir liste böyle olacak şekilde bash'deki dosyaları etiketlemenin hızlı ve basit bir yolu var mı

-rw------- 1 root   88039 Sep 29 16:31 7CCE2EC3-3191-4379-C036-1C48CCCE4C6C
-rw------- 1 root 1985554 Sep 27 16:09 61C6DCDC-04C6-5137-8894-2C8930251D1E
-rw------- 1 root  248965 Sep 26 14:12 22384DC7-D60E-57CC-94C2-C5301C980990
-rw------- 1 root  293908 Sep 22 18:27 C14E6C74-C301-49CC-C625-070721CC47C1
-rw------- 1 root  120965 Sep 19 19:17 2407C1C5-D09C-41E1-9080-C2CC8C86D0CC
-rw------- 1 root   20036 Sep 13 18:32 78691D77-C4E6-4ED1-8119-C09CCC194892
-rw------- 1 root   11789 Sep 12 23:16 8C8C190C-5340-421C-96D1-D4111C5E062C
-rw------- 1 root    1884 Sep 11 22:07 CCC91959-9744-4339-9C99-0C75E301090C

böyle bir şey olur (veya benzeri)

-rw------- 1 root   88039 Sep 29 16:31 7CCE2EC3-3191-4379-C036-1C48CCCE4C6C
-rw------- 1 root 1985554 Sep 27 16:09 61C6DCDC-04C6-5137-8894-2C8930251D1E
-rw------- 1 root  248965 Sep 26 14:12 22384DC7-D60E-57CC-94C2-C5301C980990 -> MYOLDFILE1
-rw------- 1 root  293908 Sep 22 18:27 C14E6C74-C301-49CC-C625-070721CC47C1
-rw------- 1 root  120965 Sep 19 19:17 2407C1C5-D09C-41E1-9080-C2CC8C86D0CC -> MYNEWFILE.TXT
-rw------- 1 root   20036 Sep 13 18:32 78691D77-C4E6-4ED1-8119-C09CCC194892
-rw------- 1 root   11789 Sep 12 23:16 8C8C190C-5340-421C-96D1-D4111C5E062C -> hello.c
-rw------- 1 root    1884 Sep 11 22:07 CCC91959-9744-4339-9C99-0C75E301090C

İle bir şeyler yapmaya çalıştım ln -s ama sonra birçok kopya ile bitirdim çünkü linkler aynı dizinde ve güzel bir görünüm elde etmek için grs ile ls filtrelemeliyim .. takdir herhangi bir yardım


İstiyor musun attryani, genişletilmiş öznitelikler?
choroba

Bu bir ls çıktı? Görünüşe göre kullanıyorsun -L seçenek (başkalarını grup veya sahibini gizlemek için). Deneyin /bin/ls -l
Paulo

evet bunlar bir ll şu anda olarak tanımlanan takma ad ls -alF, Sahiplik ve / veya özellikler umrumda değil
Edoardo

Yanıtlar:


1

Düzenli yapmak için mevcut herhangi bir özelliği güvenilir bir şekilde (yanlış) kullanabileceğinizi sanmıyorum. ls (seçenekli veya seçeneksiz) ne istersen yap. Yeniden tanımlamanız gerekiyor ls bir komut dosyası, bir işlev veya bir diğer ad ile.

Yeniden tanımlamam ls Olsa da, en azından bu örnekte değil, olması gerektiği kavramın basit bir kanıtı . Komut satırı anahtarlarını desteklemek ls Örneği aşırı karmaşık hale getirirdi.

Çözümümü uygulamak için genişletilmiş öznitelikleri ve bunları işlemek için araçları destekleyen bir dosya sistemine ihtiyacınız var (ör. apt-get install attr Debian'da).

Özelliği ayarlamak için:

setfattr -n user.mytag -v "hello.c" "8C8C190C-5340-421C-96D1-D4111C5E062C"

Not: mytag isteğe bağlı bir isimdir. Birini seç ve ona yap.

Özelliği kaldırmak için:

setfattr -x user.mytag "8C8C190C-5340-421C-96D1-D4111C5E062C"

Bu şeyleri daha uygun bir şekilde yapmak için özel komut dosyaları veya işlevler oluşturabilirsiniz. Şimdi seçtiğini söyleyelim ll ne istersen yapmak için. Bir takma ad ise, önce onu unalias etmeniz gerekir:

unalias ll

Ardından bir işlev tanımlayın:

function ll() { find "$@" -maxdepth 1 -exec \
   sh -c '
      a=$(getfattr -n user.mytag --only-values "$1" 2>/dev/null)
      ls -dalF -- "$1" | tr -d "\n"
      if [ -z "$a" ]; then printf "\n"; else printf " => %s\n" "$a"; fi
   ' sh {} \;
}

Kullanım örnekleri:

ll   # but see notes below
ll 8C8C190C-5340-421C-96D1-D4111C5E062C
ll /bin
ll foo.txt bar.txt

Örnek çıktı:

-rw------- 1 root root 11789 Sep 12 23:16 8C8C190C-5340-421C-96D1-D4111C5E062C => hello.c

Notlar:

  • kullandım =>, değil ->, çünkü ikincisi zaten tarafından kullanılıyor ls Symlinks için.
  • POSIX’de en az bir yol find çağırma. Tek ll (argüman olmadan) neden olabilir find başarısız olmak (karşılaştırmak) bu cevap ). Eğer öyleyse, geçmek için bazı ön mantık ihtiyacınız . için find.
  • -maxdepth POSIX de değil. Kullanamazsan, bkz. bu soru .
  • Bu fonksiyon basitçe bütün argümanlarına geçer. find (gibi "$@" ). Bu, bu özel demektir ll normalde kullanılan seçenekleri anlamıyor ls (veya ortak ll ad). Öte yandan, içine testler enjekte find mümkün.
  • İsim veya etiketlerdeki özel veya yazdırılamayan karakterler beklenmeyen çıktılara neden olabilir.
  • ls -dalF her nesne için ayrı ayrı çağrılır, dolayısıyla ortaya çıkan satırlar normal sütunlara hizalanmayabilir. Düşünmek -printf yerine eylem ls İhtiyaç duyduğunuz tüm bilgileri yazdırmak getfattr. Sekmeyi bir ayırıcı olarak kullanma -printf format, çok satırlı bir çıktıyı sütunlaştırır (en azından bazı sıralamalara göre). Uygun ile unutmayın -printf ihtiyacınız olmayacak biçimde tr.
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.