Komut dosyanızın başarısız olmasının nedeni, şu $9-bkp
ifadenin bir ifadesidir: -bkp
alıntı da yapılmalı, bu nedenle satır şöyle olmalıdır:
ls -lt *.xls | head -10 | awk '{print "mv " $9 " "$9"-bkp"}' | sh
Bununla birlikte, bu gereksiz yere karmaşıktır: birçok dosya özniteliği listesi vardır, sonra awk
adı ayıklamak için kullanın . Ayrıca, oluşturulan komutları çalıştırmak için bir alt kabuk başlatmanız gerekmez. Ayrıca, bir dosya adında boşluklar varsa yukarıdaki komut çalışmaz.
Aşağıdakiler tüm bu noktaları ele almaktadır:
ls -t *.xls | head -10 | while read; do mv "$REPLY" "$REPLY-bkp"; done
Bu durumda, ls -t
her satırda bir tane olmak üzere yalnızca dosya adlarını listeler; gömülü, öncülük veya izlemenin tümü dahil olmak üzere tüm boşlukları içeren read
her bir tam satırı kopyalar REPLY
; ve mv
komut her satır için çalıştırılır.
Daha yaygın read name
olanın bir çizgiyi kopyalayacağını name
, ancak baştaki ve sondaki boşlukların bulunmadığını unutmayın.