Sementara saya telah menggunakan BASH selama beberapa tahun, pengalaman saya dengan skrip BASH relatif terbatas.
Kode saya seperti di bawah ini. Seharusnya ambil seluruh struktur direktori dari dalam direktori saat ini dan direplikasi ke dalamnya $OUTDIR
.
for DIR in `find . -type d -printf "\"%P\"\040"`
do
echo mkdir -p \"${OUTPATH}${DIR}\" # Using echo for debug; working script will simply execute mkdir
echo Created $DIR
done
Masalahnya adalah, ini contoh struktur file saya:
$ ls
Expect The Impossible-Stellar Kart
Five Iron Frenzy - Cheeses...
Five Score and Seven Years Ago-Relient K
Hello-After Edmund
I Will Go-Starfield
Learning to Breathe-Switchfoot
MMHMM-Relient K
Catat spasi: -S Dan for
ambil parameter kata demi kata, jadi output skrip saya terlihat seperti ini:
Creating directory structure...
mkdir -p "/myfiles/multimedia/samjmusicmp3test/Learning"
Created Learning
mkdir -p "/myfiles/multimedia/samjmusicmp3test/to"
Created to
mkdir -p "/myfiles/multimedia/samjmusicmp3test/Breathe-Switchfoot"
Created Breathe-Switchfoot
Tapi saya membutuhkannya untuk mengambil seluruh nama file (satu baris pada satu waktu) dari output find
. Saya juga telah mencoba membuat find
tanda kutip ganda di setiap nama file. Tetapi ini tidak membantu.
for DIR in `find . -type d -printf "\"%P\"\040"`
Dan output dengan baris yang diubah ini:
Creating directory structure...
mkdir -p "/myfiles/multimedia/samjmusicmp3test/"""
Created ""
mkdir -p "/myfiles/multimedia/samjmusicmp3test/"Learning"
Created "Learning
mkdir -p "/myfiles/multimedia/samjmusicmp3test/to"
Created to
mkdir -p "/myfiles/multimedia/samjmusicmp3test/Breathe-Switchfoot""
Created Breathe-Switchfoot"
Sekarang, saya perlu beberapa cara yang bisa saya ulangi seperti ini, karena saya juga ingin menjalankan perintah yang lebih rumit yang melibatkan gstreamer
setiap file dalam struktur serupa berikut. Bagaimana saya harus melakukan ini?
Sunting: Saya memerlukan struktur kode yang akan memungkinkan saya menjalankan beberapa baris kode untuk setiap direktori / file / loop. Maaf jika saya tidak jelas.
Solusi: Saya awalnya mencoba:
find . -type d | while read DIR
do
mkdir -p "${OUTPATH}${DIR}"
echo Created $DIR
done
Ini berfungsi dengan baik untuk sebagian besar. Namun, saya kemudian menemukan bahwa karena pipa menghasilkan loop sementara berjalan dalam subkulit, variabel apa pun yang ditetapkan dalam loop kemudian tidak tersedia yang membuat menerapkan penghitung kesalahan cukup sulit. Solusi terakhir saya (dari jawaban ini di SO ):
while read DIR
do
mkdir -p "${OUTPATH}${DIR}"
echo Created $DIR
done < <(find . -type d)
Ini kemudian memungkinkan saya untuk menambahkan variabel secara kondisional dalam loop yang akan tetap tersedia nanti dalam skrip.
/
karakter yang tidak diinginkan. Tapi apa pun diperbolehkan kecuali /
dan \0
sehingga Anda harus membiarkan mereka.