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
rename
bashを想定し、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)など、問題のある他の文字に対しても同じことができます。