Saya ingin menghapus semua ekstensi .sh jadi ini:
ls *.sh | xargs -I {} mv {} `basename {} .sh`
Namun tidak berfungsi, berperilaku seperti basename
mengembalikan nama file yang tidak berubah.
Mengapa berperilaku seperti itu?
Misalnya, ini berfungsi:
ls *.sh | xargs -I {} echo `basename {}.jpg .jpg`;
EDIT :
Solusi: kutipan tunggal mencegah `basename ...`
evaluasi oleh shell sebelum perintah dijalankan.
ls *.sh | xargs -I {} sh -c 'mv {} `basename {} .sh`'
-i
opsi, tetapi opsi 'klasik' tersebut telah usang. Sebagai contoh untuk menggunakan hanya satu opsi / baris, halaman manual POSIX baru merekomendasikan-L1
. Untuk memanggil perilaku lama-i
, halaman merekomendasikan-I'{}'
opsi.