ファイル名の改行を削除する


9

wgetがログを追加するファイル名を生成するPHPコードがあります。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、パテを使ってその不要な文字に限定されないすべての特殊文字がになるときのように思えるので?、ターゲットにしたいのはその改行だけです。

回答:


11

renameCentOS 6が提供するutil-linuxのユーティリティを使用し、bashを想定します。

rename $'\n' '' wget_*

リストされたファイルの名前から改行文字を削除するように要求します。小さなサブセットで試して、期待どおりの結果が得られることを確認することをお勧めします(renameCentOS 7では、-v変更内容を示すスイッチをサポートしています)。

代わりに、Perlベースのディストリビューションを使用している場合rename

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

そして、-n実際に名前変更を実行せずに実行します。


仲間、何も起こらなかったpastebin.com/NjMg8vTLを私はCentOSの6を使用しています
arvil

おそらく、あなたが持っている改行文字は実際にはありません\nか?エコーなどを実行して*.txt | od -c、実際に印刷できない文字があるかどうかを確認できますか?
dhag 2015年

以下のように思える\n pastebin.com/wXCDCJjr
arvil

なんらかの理由で、以前の貼り付けのファイルが一致しない場合を除いて、何が問題なのかはわかりません*.txt(なぜそれがrename取得されないのかを説明します)。たとえばtxt$'\n'およびの代わりに2つのパターンを設定した場合''、出力は得られますか?echo $ '\ n'は実際に2つの改行を出力しますか?
dhag

1
私はrename $'\r' '' wget_*それを機能させるために使用しなければなり
ませんでした

2

findコマンドとrenameを組み合わせて、すでに回答されている内容に基づいて、現在のフォルダーとサブフォルダー内の改行を含むすべてのファイルの名前を変更するように一般化しました-

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

ここで、findコマンドはラインフィードを含むすべてのファイルを検索し、renameコマンドは名前のすべてのラインフィードをスペースに置き換えます。

キャリッジリターン(\ r)などの他の問題のある文字についても同じことができます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.