ลบไฟล์ทั้งหมดยกเว้นไฟล์บางไฟล์จากโฟลเดอร์ใน Unix [ซ้ำ]


2

ซ้ำเป็นไปได้:
วิธีลบไฟล์ทั้งหมดในไดเรกทอรียกเว้นบางไฟล์?

ฉันมักจะประสบปัญหานี้ ฉันมีชุดไฟล์ในโฟลเดอร์และต้องการลบทั้งหมดยกเว้นบางไฟล์

ตัวอย่างเช่น: ฉันมีชื่อไฟล์ตามวันที่สร้าง (เช่น 11-1-11.tar, 10-1-11.tar เป็นต้น) ตอนนี้ฉันต้องการลบไฟล์เช่น 10-1-11, 9-1-11 และอื่น ๆ แต่ไม่ใช่ไฟล์อื่น ๆ โดยทั่วไปฉันต้องการบังคับใช้สิ่งที่ควรลบและสิ่งที่ควรเก็บไว้ ฉันจะทำสิ่งนี้ได้อย่างไร

คำตอบ:


3

หากนี่คือ BASH คุณสามารถลองใช้การขยายแบบวงกลมได้ การเปิดใช้งาน:

shopt -s extglob

(ใส่ในของคุณ.bashrcถ้าคุณต้องการหรือเพียงแค่เปิดเมื่อคุณต้องการ)

จากนั้นเช่นเพื่อลบไฟล์ทั้งหมดยกเว้นชื่อไฟล์ 1 และชื่อไฟล์ 2

rm !(filename1|filename2)

นอกจากนี้คุณยังสามารถใช้สัญลักษณ์แทนเช่น * ภายในได้เช่นกัน

หรือคุณสามารถลบรูปแบบที่ตรงกับรูปแบบทั้งหมดได้:

rm +([0-9])-+([0-9])-+([0-9]).tar

จะลบไฟล์ # - # - # ทั้งหมดไฟล์ tar (ที่ตัวเลขมีตัวเลขอย่างน้อย 1 หลัก)

มันไม่ชัดเจนว่าสิ่งนี้จะตอบสนองความต้องการของคุณหรือไม่ รายละเอียดเพิ่มเติมที่นี่


2

หากชื่อไฟล์ตรงกับวันที่สร้างไฟล์อาจเป็นการง่ายกว่าที่จะลบไฟล์ที่เก่ากว่าวันที่กำหนด

สิ่งนี้สามารถทำได้อย่างง่ายดายด้วยคำสั่ง find:

find / home / john / files -type f -mtime +30 -delete

สิ่งนี้จะลบไฟล์/home/john/filesที่มีวันที่แก้ไขนานกว่า 30 วันที่ผ่านมา



0

ฉันคิดว่าคุณสามารถใช้คำสั่ง UNIX หลายคำในไพพ์เดียวและมันจะแก้ปัญหาของคุณ find | grep | xargs rm -rfหนึ่งของการแก้ปัญหาที่เป็นไปได้คือการใช้ ตัวอย่างเช่น:

$ find /path/to/directory/tree -type f | grep -v -E -f /path/to/exclude/file | xargs rm -rf

/path/to/exclude/fileสำหรับการยกเว้นบางไฟล์เพียงแค่ใส่ชื่อของพวกเขาลงในแฟ้ม ตัวอย่างเช่น:

very_useful_file.tar.gz
very_important_file.jpg

เพื่อป้องกันการลบไฟล์สำคัญที่ไม่ถูกต้องฉันแนะนำให้ทำสำเนาสำรองของไฟล์ทั้งหมด นอกจากนี้ยังมีประโยชน์ในการใช้ xargs พร้อม-pตัวเลือกซึ่ง...Prompt the user about whether to run each command line and read a line from the terminal.

เป็นไปได้ที่จะใช้findเครื่องมือโดยไม่มี grep / xargs มันจะเป็นอย่างนั้น: find /path/to/tree -type f ! -name "exlude_pattern"

ก่อนที่จะใช้คำสั่งเหล่านี้อ่านหน้าคู่มืออย่างระมัดระวังfind/grep/xargs! พวกมันอาจอันตรายมาก :)


นอกจากนี้คุณยังอาจต้องการที่จะพิจารณาอย่างรอบคอบไม่ว่าคุณจะต้องการใช้-r(recursive) (และอาจจะ-f(แรง)) เมื่อคุณกินอาหารชื่อไฟล์เพื่อสำหรับxargs rm
เดนนิสวิลเลียมสัน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.