Saya memiliki skrip sederhana yang paling saya mengerti, itu adalah perintah find yang tidak jelas. Saya punya banyak dokumentasi tetapi tidak berfungsi untuk membuatnya lebih jelas. Pikiran saya adalah bahwa hal itu bekerja seperti untuk loop, file saat ini ditemukan swap dalam untuk {} dan disalin ke $ HOME / $ DIR_NAME, tapi bagaimana pencarian dengan -path dan -o -prune kerja? Sangat menjengkelkan untuk memiliki dokumentasi yang spesifik dan relevan seperti itu dan masih belum tahu apa yang terjadi.
#!/bin/bash
# The files will be search on from the user's home
# directory and can only be backed up to a directory
# within $HOME
read -p "Which file types do you want to backup " file_suffix
read -p "Which directory do you want to backup to " dir_name
# The next lines creates the directory if it does not exist
test -d $HOME/$dir_name || mkdir -m 700 $HOME/$dir_name
# The find command will copy files that match the
# search criteria ie .sh . The -path, -prune and -o
# options are to exclude the backdirectory from the
# backup.
find $HOME -path $HOME/$dir_name -prune -o \
-name "*$file_suffix" -exec cp {} $HOME/$dir_name/ \;
exit 0
Ini hanya dokumentasi yang saya tahu saya harus dapat mengetahui hal ini.
pola -path
Nama file cocok dengan pola pola shell. Metakarakter tidak memperlakukan / atau . khususnya; jadi, misalnya, temukan. -path "./sr*sc" akan mencetak entri untuk direktori bernama ./src/misc (jika ada). Untuk mengabaikan seluruh pohon direktori, gunakan -prune daripada memeriksa setiap file di pohon. Sebagai contoh, untuk melewati direktori src / emacs dan semua file dan direktori di bawahnya, dan mencetak nama-nama file lain yang ditemukan, lakukan sesuatu seperti ini:
find . -path ./src/emacs -prune -o -print
Dari manual Findutils
- Tindakan: Perintah -exec; Varian tidak aman dari tindakan -execdir ini ditentukan oleh POSIX. Perbedaan utama adalah bahwa perintah dieksekusi dalam direktori dari mana ditemukan dipanggil, artinya {} diperluas ke jalur relatif dimulai dengan nama salah satu direktori awal, bukan hanya nama dasar dari file yang cocok.
Sementara beberapa implementasi find menggantikan {} hanya di mana ia muncul sendiri dalam argumen, GNU find menggantikan {} di mana pun itu muncul.
Dan
Sebagai contoh, untuk membandingkan setiap file header C di atau di bawah direktori saat ini dengan file / tmp / master:
find . -name '*.h' -execdir diff -u '{}' /tmp/master ';'