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
だけになります。
PuTTYでls
を使用すると、その不要な文字に限定されないすべての特殊文字が?
になり、ターゲットにしたいのはその改行だけなので、私はこれをどのように処理するのかよくわかりません。
CentOS 6が提供するutil-linuxのユーティリティrename
を使用し、bashを想定:
rename $'\n' '' wget_*
リストされたファイルの名前から改行文字を削除するように要求します。小さなサブセットで試して、意図したとおりに機能することを確認することをお勧めします(CentOS 7のrename
は、変更内容を示す-v
スイッチをサポートしています)。
代わりに、Perlベースのrename
を提供するディストリビューションを使用している場合:
rename -n 's/\n//g' wget_*
次に、-n
なしで実行して、実際に名前変更を実行します。
Findコマンドとrenameを組み合わせて、すでに回答されている内容に基づいて、現在のフォルダーとサブフォルダーに改行を含むすべてのファイルの名前を変更するように一般化しました-
find -name $'*\n*' -exec rename $'s|\n| |g' '{}' \;
ここで、findコマンドはラインフィードを含むすべてのファイルを検索し、renameコマンドは名前のすべてのラインフィードをスペースに置き換えます。
キャリッジリターン(\ r)など、他の問題のある文字についても同じことができます。