ฉันกำลังมองหาบางสิ่งที่ชอบ:
ls | ask_yes_no_for_each_file | chmod +x the_files_approved
หรือไวยากรณ์ที่คล้ายกัน
ยังสามารถทำงานกับคำสั่งอื่น ๆ ที่คุณต้องการการยืนยันเป็นรายบุคคลสำหรับ
ฉันกำลังมองหาบางสิ่งที่ชอบ:
ls | ask_yes_no_for_each_file | chmod +x the_files_approved
หรือไวยากรณ์ที่คล้ายกัน
ยังสามารถทำงานกับคำสั่งอื่น ๆ ที่คุณต้องการการยืนยันเป็นรายบุคคลสำหรับ
คำตอบ:
นี่คือสิ่งที่คุณกำลังมองหา:
find . -maxdepth 1 -type f -print0 | xargs -L1 -p0 chmod +x
การใช้งานนี้find
มากกว่าls
เพราะโดยทั่วไปการแยกวิเคราะห์ls
การส่งออกจะไม่น่าเชื่อถือ find
อย่างไรก็ตามการใช้แบบฟอร์มนี้จะทำงานกับชื่อไฟล์แม้ว่าจะมีบรรทัดใหม่หรืออักขระที่ยากอื่น ๆ
คำอธิบาย
find . -maxdepth 1 -type f -print0
นี่เป็นการเลือกไฟล์ สามารถกำหนดเองได้โดยใช้ตัวเลือกมากมายของ find ตัวเลือกprint0
บอกfind
ให้พิมพ์ชื่อไฟล์ในรายการที่คั่นด้วย null นี่เป็นเพียงความน่าเชื่อถือในการส่งรายชื่อไฟล์
xargs -L1 -p0 chmod +x
นี่ใช้รายการชื่อไฟล์ที่คั่นด้วย null ซึ่งสร้างโดยfind
และใช้คำสั่งของคุณกับพวกเขา
-L1
ตัวเลือกที่บอกxargs
การทำงานที่ชื่อไฟล์เพียงหนึ่งครั้ง -p
ตัวเลือกที่บอกxargs
เพื่อความพร้อมในการอนุมัติก่อนดำเนินการต่อ -0
ตัวเลือกที่บอกxargs
จะใช้ตัวอักษรเป็นโมฆะเป็นตัวคั่นระหว่างชื่อไฟล์
[ฉันไม่รู้-p
ตัวเลือกxargs
จนกระทั่ง @kwan ชี้ให้เห็น]
find: warning: you have specified the -maxdepth option after a non-option argument -type, but options are not positional (-maxdepth affects tests specified before it as well as those specified after it). Please specify options before other arguments.
ดังนั้นจึงทำงานร่วมกับ-maxdepth 1
ก่อนที่จะเป็น:-type f
find . -maxdepth 1 -type f -print0 | xargs -L1 -p0 chmod +x
xargs
คุณสามารถใช้
เช่น:
ls|xargs -I path -p chmod +x path
ตัวเลือก-p
: แจ้ง ให้ผู้ใช้ทราบเกี่ยวกับการเรียกใช้แต่ละบรรทัดคำสั่งและอ่านบรรทัดจากเทอร์มินัล รันเฉพาะบรรทัดคำสั่งหากการตอบกลับเริ่มต้นด้วย 'y' หรือ 'Y'
xargs -p
มากจนฉันจะคัดลอกมัน
touch "a very long file name
และกด Enter ดูความต่อเนื่องของบรรทัดและพิมพ์ใบเสนอราคาปิดแล้วกด Enter อีกครั้ง tadaa ขึ้นบรรทัดใหม่ในชื่อไฟล์ ออกจากความเกียจคร้านเพื่อพิมพ์ชื่อไฟล์ยาวอีกครั้ง
find
POSIX-exec printf '%s\0' {} +
คำสั่งที่เข้ากันได้โดยใช้ อย่าคิดว่าจะมีวิธีที่จะทำให้ POSIX ทำงานร่วมกันได้