Ingin menyalin setiap file dari struktur direktori ke direktori tertentu hanya jika file belum ada di sana.
Dapatkan bagian pertama dari pertanyaan Stack Overflow ini :
find . -type f -exec cp {} /target-directory \;
Bagaimana saya bisa mengecek apakah file itu ada atau tidak? Jika tidak, salin file, jika tidak lewati.
command-line
bash
files
find
Tuan au
sumber
sumber
Jawaban:
Anda dapat menggunakan perintah
-u
beralih daricp
:atau gunakan
rsync
perintah dengan--ignore-existing
:Contoh:
sumber
Perintah asli Anda dapat ditulis ulang sebagai:
Kuncinya di sini adalah kita memanggil shell dengan perintah khusus dan meneruskan file yang ditemukan sebagai
$1
argumen. Jikatest -e /target-directory/"$1"
gagal, itu berarti file tidak ada, dalam hal inicp
akan menyalin file.Secara umum, seseorang dapat menggunakan perintah lain, selama perintah itu dapat memverifikasi keberadaan file. Beberapa alternatif lain:
/usr/bin/realpath -e /target-directory/"$1" > /dev/null || cp "$1" /target-directory
stat >/dev/null /target-directory/"$1" || cp "$1" /target-directory/"$1"
sumber
stat
harus menguji keberadaan file di Bash? Bukankahtest -e
lebih sederhana?Baca
man cp
, dan gunakan--no-clobber
opsi untukcp
.sumber