ファイル名から改行文字を削除

ファイル名から改行文字を削除

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パテを使用すると、すべての特殊文字(不要な文字に限定されない)がなり?、私が対象にしたいのは改行文字だけのようなのでこれをどのように処理すべきかわかりません。

答え1

renamebashを想定し、CentOS 6に付属のutil-linuxユーティリティを使用してください。

rename $'\n' '' wget_*

そのためには、リストされたファイル名から改行文字を削除する必要があります。必要に応じて動作することを確認するために、小さなサブセットで試してみることをお勧めします(CentOS 7では変更を示すスイッチがサポートされているrenameことに注意してください)。-v

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

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

その後、実際に名前を変更せずに実行してください-n

答え2

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

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

ここで、findコマンドは改行文字を含むすべてのファイルを検索しますが、renameコマンドは名前の各改行文字を空白に置き換えます。

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

関連情報