ฉันต้องการใช้การค้นหาและลบทุกสิ่งด้วยข้อยกเว้นของหนึ่งโฟลเดอร์หากพบ เช่น
[oracle@SJOAM test]$ ls -l
total 4
-rw-r--r--. 1 oracle oinstall 0 Sep 2 02:05 a
-rw-r--r--. 1 oracle oinstall 0 Sep 2 02:05 b
-rw-r--r--. 1 oracle oinstall 0 Sep 2 02:05 c
-rw-r--r--. 1 oracle oinstall 0 Sep 2 02:05 d
-rw-r--r--. 1 oracle oinstall 0 Sep 2 02:05 e
-rw-r--r--. 1 oracle oinstall 0 Sep 2 02:05 f
-rw-r--r--. 1 oracle oinstall 0 Sep 2 02:05 g
drwxr-xr-x. 2 oracle oinstall 4096 Aug 7 07:25 test2
ฉันต้องการลบทุกอย่างยกเว้น test2
ดังนั้นฉันเริ่มต้นด้วย
[oracle@SJOAM test]$ find test2 -prune -o -print
[oracle@SJOAM test]$
ไม่ต้องส่งคืน
q1) ทำไมคำสั่งด้านบนโดยไม่มี -name แสดงไฟล์ที่เหลือ? แต่ด้วย "-name" ที่แสดงด้านล่างแสดงไฟล์ที่เหลือ?
[oracle@SJOAM test]$ find -name test2 -prune -o -print
.
./e
./a
./b
./d
./f
./g
./c
ด้วย -name ฉันสามารถดูไฟล์ที่เหลือได้ แต่ฉันยังสามารถเห็น "." โฟลเดอร์ปัจจุบัน
[oracle@SJOAM test]$ find -name test2 -prune -o -exec rm -r '{}' \;
rm: cannot remove directory: `.'
[oracle@SJOAM test]$ ls -l
total 4
drwxr-xr-x. 2 oracle oinstall 4096 Aug 7 07:25 test2
ไฟล์ทั้งหมดจะถูกลบออก แต่ฉันรู้สึกว่ามันไม่ใช่วิธีที่ถูกต้อง - พยายามลบ ""
q2) ฉันจะป้องกันการลบ "ได้อย่างไร" ?
นอกจากนี้
[oracle@SJOAM test]$ find test2
test2
test2/a9
test2/a8
test2/a7
test2/a10
[oracle@SJOAM test]$ find -name test2
./test2
[oracle@SJOAM test]$
q3) ทำไม -name จึงแสดง. /test แต่ไม่มี -name มันจะไม่แสดง "./"?
rm *
. สิ่งนี้จะไม่ลบ test2 เพราะเป็นไดเรกทอรี