फ़ाइल नामों में नई सूचियाँ निकालें


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से उपयोग -लिनेक्स, जो CentOS 6 प्रदान करता है, और बैश मानते हुए:

rename $'\n' '' wget_*

यह सूचीबद्ध फ़ाइलों के नामों से नए वर्णों को हटाने के लिए कहता है। मैं यह सुनिश्चित करने की सलाह देता हूं कि यह सुनिश्चित करने के लिए कि आप इसे क्या चाहते हैं (यह ध्यान दें कि renameCentOS 7 एक -vस्विच का समर्थन करता है जो आपको दिखाता है कि यह क्या बदलाव कर रहा है)।

यदि इसके बजाय आप एक वितरण पर थे जो पर्ल-आधारित प्रदान करता है rename:

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

और फिर -nवास्तव में नाम बदलने के बिना चलाते हैं ।


भाई, कुछ भी नहीं हुआ pastebin.com/NjMg8vTL मैं
सेंटो

शायद आपके द्वारा दिया गया लाइनफीड चरित्र वास्तव में नहीं है \n? क्या आप ईको जैसा कुछ कर सकते हैं *.txt | od -cताकि हम देखें कि वास्तविक गैर-मुद्रण योग्य चरित्र क्या है?
ढग

ऐसा लगता है जैसे \n pastebin.com/wXCDCJjr
arvil

मुझे यकीन नहीं है कि क्या गलत है, जब तक कि किसी कारण से आपके पिछले पेस्ट में फ़ाइल मेल नहीं खाती *.txt(जो बताएगी कि renameइसे क्यों नहीं उठाया जाता है)। आप के लिए, कहते हैं दो पैटर्न निर्धारित करते हैं, तो txtबजाय $'\n'और '', आप किसी भी उत्पादन मिलता है? क्या इको $ '\ n' वास्तव में दो नए समाचारों को प्रिंट करता है?
ढिग

1
मुझे rename $'\r' '' wget_*इसके लिए काम करना था
rshdev

2

जो पहले से ही उत्तर दिया गया था, उस पर भवन बनाना, मैंने इसे वर्तमान फोल्डर और सब-फोल्डर में लाइन फीड वाली सभी फाइलों का नाम बदलने के लिए सामान्य किया है, नाम बदलने के साथ कमांड को जोड़कर -

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

यहां, कमांड लाइन लाइन फीड वाली सभी फाइलों को ढूंढती है और नाम बदलकर प्रत्येक लाइन फीड को रीनेम की जगह के नाम से बदल देती है।

ऐसा ही किसी अन्य ऐसे समस्याग्रस्त पात्रों के लिए भी किया जा सकता है जैसे कि गाड़ी वापसी (\ r)।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.