Prelude:
Bir yol / dosya listesi sıralı girişi göz önüne alındığında, ortak yolların nasıl bulunur?
Sıralanan girdiyi stdin'den beslerken, stdin'den en kısa öneki nasıl seçilir?
Burada "önek" normal bir anlama sahiptir, örneğin, "abcde" dizgisi "abc" önekine sahiptir. İşte benim örnek girdi
$ echo -e '/home/dave\n/home/dave/file1\n/home/dave/sub2/file2'
/home/dave
/home/dave/file1
/home/dave/sub2/file2
Bu, komutu kullanarak art arda uygun öneki stdin'den kaldırmak için bir örnektir sed:
$ echo -e '/home/dave\n/home/dave/file1\n/home/dave/sub2/file2' | sed "N; /^\(.*\)\n\1\//D; P; D"
/home/dave/file1
/home/dave/sub2/file2
Soru:
Sorum şu , bunun yerine uygun öneki nasıl koruyacağınız ve bu öneki olan tüm satırları nasıl kaldıracağım. Her ikisi de sinüs /home/dave/file1ve /home/dave/sub2/file2öneki vardır /home/dave, /home/davediğer ikisi olmasa da korunacaktır. Yani, yukarıdaki sedkomutun tam tersini yapar.
Daha fazla bilgi:
- Giriş zaten sıralanacaktı
- Eğer
/home/dave /home/dave/file1 /home/phil /home/phil/file2(echo -e '/home/dave\n/home/dave/file1\n/home/dave/sub2/file2\n/home/phil\n/home/phil/file2') varsa, beklerdim/home/daveve/home/philcevap olurdum .
Uygulama:
Benzer içerik içeren iki disk birimim var. V1’de olanı, ancak v2’den başka bir disk birimine, v3’e kopyalamak istiyorum. Kullanılması find, sortve commben kopyalamak için ne bir listesini elde edebilir, ama ben daha ileri o listeyi temizlemek gerekir. Yani /home/davelistede olduğum sürece diğer ikisine de ihtiyacım yok.
Teşekkürler!
/home/dave /home/dave/file1 /home/phil /home/phil/file2, ben bekliyorsunuz ediyorum/home/daveve/home/philcevabı olmalıydı.