Başka bir komut tarafından üretilen boşluk içeren bir dosya listesine komut nasıl uygulanır?


0

Bunun gibi pipolu bir komutum var:

$ ls -t|tail -n 10

Şimdi, yukarıdaki komut tarafından üretilen tüm dosyaları kaldırmak istersem, dosyalar boşsa, çalışmaz:

$ rm `ls -t|tail -n 10`
# assuming the first response is 'The File Name', I get:
rm: cannot remove ‘The’: No such file or directory
rm: cannot remove ‘File’: No such file or directory
rm: cannot remove ‘Name’: No such file or directory

Dosya adlarını rm'ye göndermeden önce nasıl alıntı yapabilirim?


IFS'yi boşluktan başka bir şeye ayarlamak istersiniz.
Hennes

@Hennes, IFS='\n' rm `ls the*` ?
TheOne

Işe yarayabilir. IFS 'Dahili Dosya Ayırıcı' dır. Varsayılan olarak bir boşluğa. Herhangi bir karaktere ayarlayabilirsiniz. Newline ('\ n') ve null (IFS = $ '\ 0') en sık kullanılan seçeneklerdir. (Sıklıkla birlikte find -print0. - Ancak en iyi seçenek ne yapmaya çalıştığınıza bağlıdır ve "ls | cut -d '' -f 3 | sort | etc ..." örneğiniz yorum yapmam için belirsizdir bu konuda.
Hennes

$ IFS = '\ n' 'rm *' nin bana verdiği şey:rm: cannot remove ‘the file\nthe file2\nthe file3’: No such file or directory
TheOne

Sadece silme için böyle bir şey kullanır: find /path/to/dir -name *.avi -delete {} \;. Bu amacınıza bir çözüm gibi gözüküyor, ancak OP'de sorulan soruya değil.
Hennes

Yanıtlar:


1

Bunu dene:

boşluk içeren dosyaları veren komut | IFS = okuma -r dosya
yap
  rm "$ dosya"
tamam

Girdi, yeni satırlara bölünecek, adlarında yeni satır bulunan dosyalar çalışmayacak. Boşluk içeren adlardan alıntı yapmak olsa da sorunsuz çalışır.


Ters eğik çizgiler için öyle değil. Aldığınız sürece (çok doğru bir şekilde yaptığınız) alıntı yaptığınızda, sorun çözülür for.
terdon

@ Peter, döngü olmadan aynı herhangi bir şekilde?
TheOne

@ Mutlak0, cevabımda açıklandığı gibi komuttan alıntı yaparak döngüyü önleyebilirsiniz. Yine de iyi bir fikir değil, tuhaf karakterlerle başa çıkmak için döngü daha güvenli.
terdon

@ Absolute0 Bu gerçekten sizin için işe yaradı mı? Bir dosya bir boşluk içeriyorsa, cut -d ' 'düzgün bir şekilde bile geçemez .
slhck

@slhck, aslında cut kullanmıyordum - bazı karmaşık komutlar vermeye çalışıyordum. Asıl emrimle gitmeliydim.
Ocak'ta
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.