Ini adalah skrip di bash, menyalin file dari satu direktori ke direktori lain, tetapi mungkin ada duplikat di sub-direktori. Jadi saat menyalin, itu harus mengenali jika file lain memiliki nama yang sama dan jika demikian - ubah nama file yang sedang disalin. Saya mencoba ini
for i in $1; do
find $i -type f -name img*.jpg -exec cp {} $2 \;
for j in $2; do
find $j -type f -name $i | while read filename; do if test "$i"="$j"; then mv $i new_filename; fi done
done
done
tapi saya mendapatkan pesan kesalahan yang mengatakan nama file tidak boleh mengandung garis miring yang agak aneh ... saya seorang pemula, silakan komentar jika Anda memasukkan kode Terima kasih.
Jawaban:
Anda
$1
harus menjadi daftar direktori, karena ini adalah parameter pertama setelah ditemukan. BAIK?Dalam penemuan pertama Anda, Anda harus mengutip tanda bintang:
-name 'img*.jpg'
Kemudian Anda salin direktori
$2
. Karena itu,$2
di untuk kedua Anda adalah direktori, dan hanya satu.Jika niat Anda adalah untuk melihat setiap mengajukan di
$2
, gunakanfor j in $2/*
Lalu,find $2 -type f -name $i | while
...BTW, jika kebetulan nama dapat mengandung spasi, gunakan tanda kutip ganda di sekitar parameter.
sumber