cara memeriksa duplikat dan mengganti nama file jika ada saat menyalinnya dari sumber lain

0

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.

guest_112241
sumber
Bisakah Anda memberi contoh struktur direktori?
slhck
Mungkin melihat unix.stackexchange.com/a/17293/4499 .
Joseph Quinsey

Jawaban:

0

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, gunakan for 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.

user278892
sumber