และด้วยไฟล์ที่เก่าที่สุดที่ด้านล่าง?
นอกจากนี้หากฉันทำเช่นนี้เป็นไปได้ไหมที่จะตัดส่วนหัวที่ซ้ำซ้อนที่อยู่ในไฟล์ HTML แต่ละไฟล์ ฉันเห็นตัวเองเชื่อมไฟล์ HTML จำนวนมากเข้าด้วยกันและมันก็เป็นการดีที่จะลดขนาดไฟล์ของไฟล์ที่ดีที่สุดลงเล็กน้อย
และด้วยไฟล์ที่เก่าที่สุดที่ด้านล่าง?
นอกจากนี้หากฉันทำเช่นนี้เป็นไปได้ไหมที่จะตัดส่วนหัวที่ซ้ำซ้อนที่อยู่ในไฟล์ HTML แต่ละไฟล์ ฉันเห็นตัวเองเชื่อมไฟล์ HTML จำนวนมากเข้าด้วยกันและมันก็เป็นการดีที่จะลดขนาดไฟล์ของไฟล์ที่ดีที่สุดลงเล็กน้อย
คำตอบ:
ในการต่อไฟล์ที่คุณใช้
cat file1 file2 file3 ...
ในการรับรายการชื่อไฟล์ที่ยกมาเรียงลำดับตามเวลาใหม่สุดมาก่อนคุณใช้
ls -t
วางมันทั้งหมดเข้าด้วยกัน,
cat $(ls -t) > outputfile
คุณอาจต้องการให้ข้อโต้แย้งบางอย่างกับls
(เช่น, *.html
)
แต่ถ้าคุณมีชื่อไฟล์ที่มีช่องว่างอยู่มันจะไม่ทำงาน My file.html
จะได้รับการสันนิษฐานว่าจะเป็นสองชื่อไฟล์: และMy
file.html
คุณสามารถทำให้การls
พูดชื่อไฟล์และจากนั้นใช้ที่เข้าใจอ้างเพื่อส่งผ่านอาร์กิวเมนต์ไปxargs
cat
ls -tQ | xargs cat
สำหรับคำถามที่สองของคุณการกรองบางส่วนของไฟล์นั้นไม่ใช่เรื่องยาก แต่ก็ขึ้นอยู่กับว่าคุณต้องการที่จะดึงออก อะไรคือ "ส่วนหัวซ้ำซ้อน"?
cat $(ls -t)
ยังมีความเสี่ยงที่จะขยายชื่อไฟล์ หากมีชื่อไฟล์ที่มี*
หรือ?
หรือหรือการแสดงออกวงเล็บ (เช่นfile-[old].html
); และถ้าชื่อไฟล์ตีความว่าเป็นรูปแบบที่ตรงกับชื่อไฟล์อื่น ๆ ; วิธีการจะสร้างรายการที่ไม่ถูกต้อง set -f
จะแก้ไขข้อบกพร่องนี้
ls -Q
xargs
อาจจะผลิตออกซึ่งไม่เหมาะสำหรับ ตัวอย่างเช่น"foo"
กลายเป็น"\"foo\""
แต่ xargs ไม่เข้าใจคำพูดคู่ที่หลบหนีภายในสตริงที่มีเครื่องหมายคำพูดคู่
วิธีที่ง่ายที่สุดของรายชื่อไฟล์ในการสั่งซื้อสินค้าอื่น ๆ กว่า lexicographic อยู่กับ zsh บ่น glob โดยไม่ต้อง zsh คุณสามารถใช้ls
แต่แยกการส่งออกของls
จะเต็มไปด้วยอันตราย
cat *(om)
หากคุณต้องการตัดบางบรรทัดใช้ sed หรือ awk หรือ perl ตัวอย่างเช่นหากต้องการนำไฟล์<head>
จากไฟล์แรกและรวม<body>
ส่วนต่างๆจากไฟล์อื่นเข้าด้วยกันสมมติว่า<body>
และ</body>
แท็กอยู่คนเดียวในบรรทัดในทุกไฟล์:
{
sed -e '/<\/body>/ q' *.html(om[2])
sed -e '1,/<body>/ d' -e '/<\/body>/,$ d' *.html(om[3,-1])
echo '</body>'
echo '</html>'
} >concatenated.html
คำอธิบาย:
concatenated.html
คือการสร้าง ดังนั้นจึงเป็น*.html
ไฟล์ที่อายุน้อยที่สุด(สมมติว่าไม่มีไฟล์ที่มีวันที่ในอนาคต*.html
ไฟล์ที่อายุน้อยที่สุดที่สองแต่ออกจาก</body>
บรรทัด<body>
บรรทัดและเริ่มต้นด้วย</body>
บรรทัดโซลูชันที่ @angus ให้นั้นดี แต่จะมีปัญหาหากมีไดเรกทอรีในโฟลเดอร์ซึ่งจะแก้ไขได้
cat $(ls -tpa | grep -v / )
cat $(ls -t) > outputfile
มิฉะนั้นก็cat
ปฏิเสธชื่อไฟล์ที่ยกมา