ไม่รวมไฟล์ใน bash loop


10

ในสคริปต์ต่อไปนี้ฉันจะแยกไดเรกทอรีในลูปได้อย่างไร ฉันต้องการทำเช่นนี้เพราะไฟล์ทั้งหมดเป็น symlink ที่ชี้ไปยังไดเรกทอรีที่มีอยู่ในระดับเดียวกันดังนั้นฉันไม่ต้องการเพิ่ม


cd /var/www
for dir in */
do
        base=$(basename "$dir")
        tar -czfh "${base}.tar.gz" "$dir"
done

คำตอบ:


13

คุณสามารถเพิ่มcontinueคำสั่งเช่นนี้:

cd /var/www
for dir in */
do
        if [ "$dir" == "foo" ] ; then
              continue;
        fi
        base=$(basename "$dir")
        tar -czfh "${base}.tar.gz" "$dir"
done

หรือคุณสามารถทำได้ด้วยfindคำสั่ง:

find /var/www -maxdepth 1 -type d \( -name foo \) -prune -o -print -exec bash -c "tar -czfh \`basename {}\`.tar.gz {}" \;

7

คุณต้องเปิดใช้extglobงานสิ่งนี้หากยังไม่ได้เปิดใช้งาน ( shopt -s extglob):

for dir in !(dirname)/
...
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.