ลบบรรทัดใหม่ในชื่อไฟล์


9

ฉันมีรหัส PHP ที่สร้างชื่อไฟล์ที่ wget จะผนวกบันทึกของมัน ฉันสร้างไฟล์มากกว่า 2000 ไฟล์ แต่ปัญหาคือฉันมีปัญหาในการทำงานกับพวกเขาเพราะฉันมีข้อผิดพลาดในการใส่PHP_EOLเป็นส่วนหนึ่งของชื่อรหัสนั้นจะเพิ่ม LF/line feed/%0Aที่ชื่อของมัน

ตัวอย่างชื่อไฟล์ดังกล่าว (เมื่อเข้าถึงผ่านเบราว์เซอร์เมื่อใส่ / var / www / html) http://xxxx/wget_01_a%0a.txtให้สังเกต%0aก่อนชื่อนามสกุล

ฉันสับสนและฉันหวังว่าจะมีแบทช์การเปลี่ยนชื่อที่จะค้นหาไฟล์ทั้งหมดและหากพบว่าline feedมันจะเปลี่ยนชื่อโดยไม่มีฟีดบรรทัดดังนั้นจึงเป็นเพียงhttp://xxxx/wget_01_a.txt

ฉันไม่แน่ใจว่าจะจัดการกับสิ่งนี้ได้อย่างไรเพราะดูเหมือนว่าเมื่อฉันlsสวมบทบาทพิเศษทุกอย่างไม่ จำกัด ว่าตัวละครที่ไม่พึงประสงค์จะกลายเป็น?สิ่งที่ฉันต้องการเพียงเป้าหมายคือตัวดึงข้อมูลบรรทัดนั้น

คำตอบ:


12

การใช้ยูทิลิตีrenameจาก util-linux ซึ่ง CentOS 6 มีให้และสมมติว่าทุบตี:

rename $'\n' '' wget_*

สิ่งนี้ขอให้ลบอักขระบรรทัดใหม่ออกจากชื่อไฟล์ที่แสดง ฉันขอแนะนำให้ลองใช้กับเซตย่อยเล็ก ๆ เพื่อให้แน่ใจว่าเป็นไปตามที่คุณต้องการ (โปรดทราบว่าrenameบน CentOS 7 รองรับ-vสวิตช์เพื่อแสดงให้คุณเห็นว่ามีการเปลี่ยนแปลงอะไร)

ถ้าคุณอยู่ในการกระจายที่ให้ Perl-based แทนrename:

rename -n 's/\n//g' wget_*

จากนั้นเรียกใช้โดยไม่-nทำการเปลี่ยนชื่อจริง


พี่ชายไม่มีอะไรเกิดขึ้นpastebin.com/NjMg8vTLฉันใช้เซนโทส 6
arvil

บางทีตัวละครตัวดึงบรรทัดที่คุณมีไม่ได้จริง\nเหรอ? คุณสามารถทำอะไรบางอย่างที่คล้ายกับเสียงก้อง*.txt | od -cเพื่อที่เราจะได้เห็นว่าตัวละครที่ไม่สามารถพิมพ์ได้จริงมีอะไรบ้าง?
dhag

ดูเหมือน\n pastebin.com/wXCDCJjr
arvil

ฉันไม่แน่ใจว่ามีอะไรผิดปกติเว้นแต่ว่าด้วยเหตุผลบางอย่างไฟล์ในการวางก่อนหน้าของคุณไม่ตรงกัน*.txt(ซึ่งจะอธิบายได้ว่าทำไมrenameไม่หยิบมันขึ้นมา) หากคุณตั้งค่าทั้งสองรูปแบบเป็นพูดtxtแทน$'\n'และ''คุณจะได้รับผลลัพธ์ใด ๆ echo $ '\ n' พิมพ์สองบรรทัดใหม่จริง ๆ หรือไม่
dhag

1
ฉันต้องใช้rename $'\r' '' wget_*เพื่อทำงาน
rshdev

2

สร้างสิ่งที่ได้รับคำตอบแล้วฉันได้วางแนวให้เปลี่ยนชื่อไฟล์ทั้งหมดที่มี line feed ในโฟลเดอร์ปัจจุบันและโฟลเดอร์ย่อยโดยรวมคำสั่ง find กับการเปลี่ยนชื่อ -

find -name $'*\n*' -exec rename  $'s|\n| |g' '{}' \;

ที่นี่ค้นหาคำสั่งค้นหาไฟล์ทั้งหมดที่มี line feed และคำสั่งเปลี่ยนชื่อแทนที่ทุกบรรทัดฟีดในชื่อที่มีช่องว่าง

สามารถทำได้เช่นเดียวกันสำหรับตัวละครที่มีปัญหาเช่น carriage return (\ r)

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