GNU menemukan dengan -exec rm menghapus kecocokan, lalu mengeluh tidak ada

4

Saya punya /domains direktori di mana saya memiliki entri seperti

theawesomesite.com
0.2.v.theawesomesite.com
0.3.v.theawesomesite.com

Dan setelah pengujian 0,3, saya akan mengatur domain utama ke alias versi baru. Bekerja sangat bagus. Sekarang, saya ingin dapat menghapus semua versi lama. Saya mencoba ini:

find /domains -name "*.v.theawesomesite.com" -not -name "0.3.v.*" -ignore_readdir_race -exec rm -fr {} \;

Direktori domain lama dihapus, tetapi untuk masing-masing find mengeluh No such file or directory. Saya menambahkan -ignore_readdir_race di bawah gagasan itu akan membantu, tetapi tidak.

Ada ide bagaimana menghilangkan keluhan ini dan mengapa find mengeluh di tempat pertama. Itu harus stat setelah -exec tapi aku tidak tahu kenapa.

ironfroggy
sumber

Jawaban:

3

Coba tambahkan -depth tandai, untuk memproses isi setiap direktori sebelum direktori itu sendiri.

EDIT oleh Penanya: Atau, bendera -pangkas, karena saya tidak peduli dengan isinya sama sekali. Saran Anda membuat saya berpikir untuk mencari di direktori setelah menghapusnya, yang tidak saya pertimbangkan, dan memberi saya jawaban akhir, jadi saya ingin menjadikan ini jawaban yang benar yang sebenarnya saya gunakan.

smokris
sumber
1

Anda bisa menggunakannya -delete bukan tindakan -exec (selama Anda memiliki temuan terbaru).

liori
sumber
1

Find paling baik disimpan ketika Anda perlu mengulang direktori, yang sepertinya tidak Anda lakukan. Dalam hal ini, saya hanya akan melakukan beberapa sihir shell. Opsi meliputi:

for dir in *.v.theawesomesite.com
    [[ $dir == 0.3.v.theawesomesite.com ]] || rm -r $dir
done

Atau:

echo *.v.theawesomesite.com | grep -v '^0.3.v.theawesomesite.com$' | xargs rm -r

Atau bahkan:

mv 0.3.v.theawesomesite.com 0.3.v.theawesomesite.com.SAVED
rm -r *.v.theawesomesite.com
mv 0.3.v.theawesomesite.com.SAVED 0.3.v.theawesomesite.com
pra
sumber
0

Coba gunakan tanda kutip tunggal dan bukan tanda kutip ganda.

Shell memperluas tanda kutip ganda sebelum meneruskannya find, jadi mungkin rm'ing direktori sebelum file:

find /domains -name 0.2.v.theawesomesite.com 0.2.v.theawesomesite.com/file1 ...

Jadi mungkin memproses direktori terlebih dahulu, lalu mencari file yang baru saja dihapus.

Adam Liss
sumber