คุณสามารถส่งไดเร็กทอรีเป็นเป้าหมายไปยังgrep
ด้วย-R
และไฟล์ของรูปแบบอินพุตด้วย-f
:
-f FILE, --file=FILE
Obtain patterns from FILE, one per line. If this option is used
multiple times or is combined with the -e (--regexp) option,
search for all patterns given. The empty file contains zero
patterns, and therefore matches nothing.
-R, --dereference-recursive
Read all files under each directory, recursively. Follow all
symbolic links, unlike -r.
ดังนั้นคุณกำลังมองหา:
grep -Ff subset.txt -r objects/
คุณสามารถรับรายการไฟล์ที่ตรงกันด้วย:
grep -Flf subset.txt -r objects/
ดังนั้นหากรายการสุดท้ายของคุณไม่ยาวเกินไปคุณสามารถทำได้:
mv $(grep -Flf subset.txt -r objects/) new_dir/
หากสิ่งนั้นส่งคืนargument list too long
ข้อผิดพลาดให้ใช้:
grep -Flf subset.txt -r objects/ | xargs -I{} mv {} bar/
และถ้าชื่อไฟล์ของคุณมีช่องว่างหรือตัวอักษรแปลก ๆ อื่นให้ใช้ (สมมติว่า GNU grep
):
grep -FZlf subset.txt -r objects/ | xargs -0I{} mv {} bar/
สุดท้ายหากคุณต้องการยกเว้นไฟล์ไบนารีให้ใช้:
grep -IFZlf subset.txt -r objects/ | xargs -0I{} mv {} bar/
"$(subset.txt)"
ถึงออกคำสั่งอย่างนั้น? นั่นคือการทดแทนคำสั่งซึ่งจะทำให้เชลล์ของคุณดำเนินการsubset.txt
(ราวกับว่ามันเป็นคำสั่งหรือสคริปต์)