ใครบ้างมีวิธีการลบไฟล์ที่น่ารำคาญ. _ และ. DS_ ที่เก็บที่ได้รับหลังจากย้ายไฟล์จาก Mac ไปยัง A Linux Server หรือไม่
ระบุไดเรกทอรีเริ่มต้นและปล่อยมันไปไหม? กดไลค์ / var / www / html / down ...
ใครบ้างมีวิธีการลบไฟล์ที่น่ารำคาญ. _ และ. DS_ ที่เก็บที่ได้รับหลังจากย้ายไฟล์จาก Mac ไปยัง A Linux Server หรือไม่
ระบุไดเรกทอรีเริ่มต้นและปล่อยมันไปไหม? กดไลค์ / var / www / html / down ...
คำตอบ:
เปลี่ยนเป็นไดเร็กทอรีและใช้:
find . -name ".DS_Store" -print0 | xargs -0 rm -rf
find . -name "._*" -print0 | xargs -0 rm -rf
ไม่ได้ทดสอบให้ลองโดยไม่ใช้ xargs ก่อน!
คุณสามารถแทนที่ช่วงเวลาหลังจากค้นหาด้วยไดเรกทอรีแทนที่จะเปลี่ยนเป็นไดเรกทอรีก่อน
find /dir/here ...
-delete
ดำเนินการซึ่งสามารถย่อให้สั้นลงได้ @JT: .
การค้นหานี้ซ้ำภายใต้ ขึ้นอยู่กับจำนวนไฟล์และไดเรกทอรีย่อยที่มี ... คุณไม่เพียง แต่ห้ามไม่ให้อัปโหลดไฟล์เหล่านั้นหรือ
-r
(recursive) ธงไม่แนะนำให้ใช้ในกรณีนี้เนื่องจากคุณไม่ต้องการที่จะลบไดเรกทอรีใด ๆ ..
command rm
เป็นทางออกที่ดีกว่า (นั่นคือโดยตรงมากขึ้น)? (โดย "โดยตรง" ฉันหมายถึงมันเกี่ยวกับปัญหาเฉพาะที่มือและไม่มีอะไรอื่นและดังนั้นจึงมีโอกาสน้อยที่จะมีผลข้างเคียงที่ไม่พึงประสงค์และยังจะอธิบายด้วยตนเองมากขึ้นกับทุกคนที่ต้องรักษารหัส ในภายหลัง)
find /var/www/html \( -name '.DS_Store' -or -name '._*' \) -delete
ใหม่กว่า findutils รองรับ-delete
ดังนั้น:
find . -name ".DS_Store" -delete
เพิ่ม-print
เพื่อรับรายการการลบด้วย
คำสั่งจะทำงานให้คุณหากคุณมีระบบ POSIX ที่ทันสมัยฉันเชื่อว่า อย่างน้อยมันก็ใช้ได้กับฉันใน OS X 10.8 และใช้ได้กับคนอื่น ๆ ที่เคยทดสอบกับ macOS 10.12 (โมฮาวี)
ให้เครดิตกับ @ephemient ในความคิดเห็นในโพสต์ของ @ X-Istence (คิดว่าเป็นประโยชน์พอที่จะรับประกันคำตอบของตัวเอง)
find
เรียกใช้ไดเรกทอรีทำงานปัจจุบันซ้ำโดยค่าเริ่มต้น
.
ใน macOS 10.12 (Sierra)
คำสั่งง่าย ๆ :
rm `find ./ -name '.DS_Store'` -rf
rm `find ./ -name '._'` -rf
โชคดี!
rm -i
find ./ -name '* py'` -rf , which did NOT prompt me to delete files. you will need to take it on the end (i.e.
-rfi`) ขอบคุณพระเจ้าสำหรับสคริปต์สำรองของฉัน
-bash: /bin/rm: Argument list too long
cd /var/www/html && find . -name '.DS_Store' -print0 | xargs -0 rm
cd /var/www/html && find . -name '._*' -print0 | xargs -0 rm
คุณสามารถเปลี่ยนเป็น zsh แทนทุบตี สิ่งนี้ช่วยให้คุณใช้ ** เพื่อจับคู่ไฟล์ได้ทุกที่ในแผนผังไดเรกทอรี:
$ rm /var/www/html/**/_* /var/www/html/**/.DS_Store
คุณสามารถรวมพวกเขาเช่นนี้:
$ rm /var/www/html/**/(_*|.DS_Store)
Zsh มีคุณสมบัติอื่น ๆ มากมายที่ทุบตีขาด แต่สิ่งเดียวที่คุ้มค่ากับการเปลี่ยน มันมีอยู่ในลินุกซ์ distros ส่วนใหญ่ (อาจจะทั้งหมด) เช่นเดียวกับ cygwin และ OS X
คุณสามารถค้นหาข้อมูลเพิ่มเติมเกี่ยวกับเว็บไซต์ zsh
**
เกินไป :-) (แม้ว่าจะไม่ได้โดยเริ่มต้นshopt -s globstar
จะต้องมีการตั้งค่า)
find . -name "FILE-TO-FIND"-exec rm -rf {} \;
find
ที่รองรับมันก็+
เหมือน xargs: find . -name "FILE-TO-FIND" -exec rm -rf {} +
- (เช่นคุณจะต้องเว้นวรรคก่อน-exec
)
ตัวอย่างการลบ "Thumbs.db" ซ้ำ ๆ
find . -iname "Thumbs.db" -print0 | xargs -0 rm -rf
ตรวจสอบโดย:
find . -iname "Thumbs.db"
ตอนนี้ควรจะไม่แสดงรายการใด ๆ ด้วย "Thumbs.db" ภายในเส้นทางปัจจุบัน
xargs
และprint0
แทนที่จะเป็นexec
(มีเหตุผล)
เป็นการดีกว่าที่จะเห็นสิ่งที่ถูกลบออกโดยเพิ่ม - พิมพ์คำตอบนี้
find /var/www/html \( -name '.DS_Store' -or -name '._*' \) -delete -print
ถ้าคุณมี Bash 4.0 ++
#!/bin/bash
shopt -s globstar
for file in /var/www/html/**/.DS_Store /var/www/html/**/._
do
echo rm "$file"
done
สิ่งที่ควรทราบ:
'-delete' ไม่สามารถเรียกซ้ำได้ ดังนั้นหาก. รายการชั่วคราว (โฟลเดอร์) มีไฟล์อยู่คำสั่งจะล้มเหลว
มีไฟล์ที่น่ารำคาญมากมายที่สร้างโดย macs: .DS_Store ._. DS_Store. รายการชั่วคราว. apdisk
คำสั่งนี้จัดการกับทุกคำสั่ง บันทึกจากการเรียกใช้ค้นหาซ้ำแล้วซ้ำอีกสำหรับการแข่งขันหลายรายการ
find /home/foo \( -name '.DS_Store' -or -name '._.DS_Store' -or -name '._*' -or -name '.TemporaryItems' -or -name '.apdisk' \) -exec rm -rf {} \;
สิ่งนี้ยังใช้งานได้:
sudo rm -rf 2018-03-*
ที่นี่การลบไฟล์ของคุณด้วยชื่อของรูปแบบ 2018-03- (อย่างอื่น)
ง่าย ๆ เข้าไว้
sudo
หรือไม่ให้ข้อมูลใด ๆ ว่าrm
ทำงานอย่างไรในบริบทของคำตอบของคุณ