Tüm .sh uzantılarını silmek istedim, bunu yaptım:
ls *.sh | xargs -I {} mv {} `basename {} .sh`
Ancak çalışmaz, basename
değişmeyen dosya adı döndürür.
Neden böyle davranıyor?
Örneğin, bu işe yarar:
ls *.sh | xargs -I {} echo `basename {}.jpg .jpg`;
DÜZENLE :
Çözüm: tek tırnak `basename ...`
, komut çalıştırılmadan önce kabuğun değerlendirmesini önler .
ls *.sh | xargs -I {} sh -c 'mv {} `basename {} .sh`'
-i
Seçenekle ilgili varsayılan olarak belirtilmedikçe , ancak bu 'klasik' seçenekler kullanımdan kaldırılmadığı sürece ilk noktanız yanlıştır . Örneğin, yalnızca bir seçenek / satır kullanmak için yeni POSIX kılavuz sayfası önerilir-L1
. Eski davranışını çağırmak için-i
sayfa-I'{}'
seçeneği önerir .