web-dev-qa-db-ja.com

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

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を使用すると、その不要な文字に限定されないすべての特殊文字が?になり、ターゲットにしたいのはその改行だけなので、私はこれをどのように処理するのかよくわかりません。

9
arvil

CentOS 6が提供するutil-linuxのユーティリティrenameを使用し、bashを想定:

rename $'\n' '' wget_*

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

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

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

次に、-nなしで実行して、実際に名前変更を実行します。

11
dhag

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

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

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

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

2
Prasad Bhat