Bagaimana saya bisa memperluas nama variabel dan wildcard dalam nama file?

0

Saya punya skrip bash di mana $DIR adalah nama direktori yang mungkin mengandung spasi.

Ini:

rm "$DIR/*.MOV"

memberikan kesalahan "Tidak ada file atau direktori". Tidak ada file yang secara harfiah bernama "* .MOV"; Saya ingin * untuk memperluas ke beberapa argumen - satu per nama file yang cocok.

Misalnya:

rm some\ folder/foo.MOV some\ folder/bar.MOV

Bagaimana saya bisa melakukan ini?

Nathan Long
sumber

Jawaban:

4

Mengutip mencegah globbing. Coba ini dengan GNU bash:

rm "$DIR"/*.MOV
Cyrus
sumber
Saya biasanya menggunakan {} ketika saya ingin menambahkan atau memodifikasi sesuatu tentang variabel saya, seperti ini: ${DIR}/*.MOV. Saya tidak tahu mana yang lebih baik, tetapi menggunakan {} bekerja untuk kasing saya setiap waktu.
jena
-1

Solusi:

for FILE in `ls "$DIR" | grep .MOV`; do
  rm "$DIR/$FILE"
done
Nathan Long
sumber
@KamilMaciorowski - Bukankah lebih baik tidak menggunakan baris baru dalam nama file Anda? Lagi pula, siapa yang akan melakukannya? Saya bukan sysadmin, saya sedang mengerjakan file data yang diproduksi oleh saya dan rekan-rekan saya dan meskipun salah satu dari mereka gila (ADHD antara lain), memasukkan baris baru ke nama file hanya gila dan saya akan memperbaiki nama file tersebut. Di tautan mereka bahkan menyarankan memasukkan cap waktu ke nama file hanya untuk menghindari tidak menempatkan baris baru di dalamnya - wtf?
jena
@ jena Bukankah lebih baik tidak menumpahkan minyak ke lantai Anda? Lagi pula, siapa yang akan melakukannya? Mungkin penipu siapa yang mau mengeksploitasi fakta bahwa Anda ceroboh. Selain: kecelakaan, pengarsip yang ditulis dengan buruk membongkar file dengan nama aneh dll. Jika Anda ingin mengurai ls, itu pilihanmu, kamu sudah diperingatkan. Orang-orang yang ingin menggunakan jawaban ini dalam proyek mereka, di mana mereka berurusan nama file yang tidak diketahui asalnya , harus diperingatkan juga sebelum mereka rm terlalu banyak.
Kamil Maciorowski
Saya sebagian setuju, seperti yang saya katakan, saya bukan sysadmin tetapi seorang ilmuwan, jadi saya biasanya bekerja pada kluster aman pada file yang dihasilkan oleh saya & amp; kolega. Jika saya menggunakan alat standar dan bekerja dengan orang yang masuk akal, saya bisa menguraikan ls baik-baik saja, apakah saya benar?
jena