
Excelでファイルを作成し、そのファイルをLinuxコンピュータにftpに送信しました。ファイルには多くのコマンドがありますmkdir
。新しく作成されたすべてのディレクトリに、最後にキャリッジリターン文字があります。以下を使用してディレクトリを見つけることができます。
find . -type d -name *$'\r'
ただし、次のコマンドを使用して削除しようとすると、次のようになります。
find . -type d -name *$'\r' | xargs rm-rf
動作しません。何も削除されません。ディレクトリはまだ存在し、まだキャリッジリターンがあります。
不快な「\r」を削除するコマンドを作成するのに役立ちますか?ありがとうございます。
PS:私はRHEL 5.3を使用しています。
答え1
Linuxrename
このコマンドを使用すると、これが簡単になります。
rename $'\r' '' *
$'\r'
現在のディレクトリ内のすべてのファイル名の最初で唯一のキャリッジリターン文字()を空の文字列()に置き換えます。キャリッジリターンを含まない名前は変更されません。または、名前を変更する必要があると見なされるファイルのみを書き込む''
ことができます。rename $'\r' '' *$'\r'
サブディレクトリのファイルにも作業が必要な場合:
shopt -s globstar
rename $'\r' '' **/*$'\r'
(Debian、Ubuntu、およびその派生製品のユーザー:rename
に変更するrename.ul
かrename $'\r' ''
、に変更しますrename 's/\r//'
。)
代わりにzshを使用してくださいzmv
機能:
zmv $'**/*\r' "${f%?}"
答え2
編集:sed
行で\ rを2回エスケープすることを忘れました。
そのうちの1つがあなたに適しています
for i in $(find . -type d -name '*\r'); do mv "$i" "$(echo $i | sed -e 's/\\r//g')"; done
find . -type d -name '*\r' -exec mv "{}" "$(echo {} | sed -e 's/\\r//g')" \;
現在のディレクトリの下に* $ \ rという名前のすべてのディレクトリを見つけます。
次に、mv
\ rを引いた同じ名前に名前を変更します。
答え3
この試みfind . -type d -name *$'\r' -exec rm -rf '{}' \;