ฉันจะย้ายไฟล์ทั้งหมดที่ส่งออกจากคำสั่งได้อย่างไร


22

ฉันมีคำสั่ง grep นี้เพื่อค้นหาไฟล์ที่ไม่มีคำว่า Attachments ในนั้น

grep -L -- Attachments *

ฉันต้องการย้ายไฟล์ทั้งหมดที่ส่งออกจากคำสั่งนั้น ฉันจะทำเช่นนั้นได้อย่างไรในทุบตี? ฉันจะใช้ท่อหรือไม่ ฉันจะใช้คำฟุ่มเฟือยถ้า / จากนั้นคำสั่งในสคริปต์แบบเต็ม?

คำตอบ:


18

หากคุณรู้ว่าไม่มีหากชื่อไฟล์มีบรรทัดใหม่แท็บช่องว่างหรือชุดกลมแบบกลมที่อาจทำให้เกิดการจับคู่สิ่งนี้อาจจะง่ายกว่าสำหรับกรณีนอก:

mv $(grep -L Attachments *) dest_dir

36

สิ่งที่คุณต้องการทำคือใช้ตัวเลือกไปป์และ greps -Z:

ใช้ GNU grep และ mv

grep -LZ -- Attachments * | xargs -0 mv -t target_directory

-Zรวมกับการxargs -0จับชื่อไฟล์ใด ๆ กับตัวอักษรพิเศษ

ใช้ BSD grep และ mv (เช่นเดียวกับ MacOS X)

grep -L --null -- Attachments * |
while IFS= read -r -d "" file; do 
    mv "./$file" target_directory
done

เมื่อวันที่ BSD, grep -Zวิธีขยาย , grep --nullทำงานได้ทั้งบน BSD และ GNU BSD mvไม่มีตัวเลือก-t

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