Saya mencoba membuat cronjob yang akan menghapus semuanya dengan pola *.jar, kecuali master.jar dan apa pun dalam pola direktori */jarkeeper/*/staging/*

Saya dekat tetapi tidak beruntung dalam menemukan perintah yang benar. Inilah yang saya miliki sejauh ini:

find /var/lib/jenkins/workspace/ ! -path "*/jarkeeper/*/staging/*" -or -type f ! -name master.jar -name \*.jar

Dan

find /var/lib/jenkins/workspace/ \( ! -path "*/jarkeeper/*/staging/*" \) -or \( -type f ! -name master.jar \) -name \*.jar

Bagaimana seharusnya format yang benar?

0
Lgalan90 25 Mei 2021, 16:16

2 jawaban

Jawaban Terbaik

Masalahnya sepertinya Anda menggunakan -atau sebagai lawan dari -atau. Saya juga menyarankan menggunakan -path sebagai lawan -name di seluruh untuk menjaga semuanya tetap konsisten dan karenanya:

find /var/lib/jenkins/workspace/ -type f ! -path "*master.jar" -or ! -path "*/jarkeeper/*/staging/*" -or -path "*.jar"
1
Raman Sailopal 25 Mei 2021, 14:20

Sebagai sebuah ide, saya selalu merasa lebih nyaman menggabungkan alat yang lebih primitif daripada menggunakan sintaks kompleks find, seperti:

find $somewhere -name \*.jar | grep -v master.jar | \
    grep -vE "jarkeeper/.*/staging/" | xargs rm -rf

Ini juga merupakan keuntungan bahwa Anda dapat menguji/memeriksa/men-debug skrip Anda bagian demi bagian.

0
senatores conscripti 25 Mei 2021, 13:25