何十ものフォルダ階層から何千ものファイル名に追加されたキャリッジリターン\ r文字を繰り返し削除する方法はありますか?また、すべてのファイルが影響を受けるわけではありません。
たとえば、ls コマンドは Cymbal2.wav? を表示します。ここで、? は \r 文字です。
私はMacOSを使用しているので、ここが正しいフォーラムではない場合...
答え1
変種@gilsの答え削除みんな(非表示)ファイル名にCR文字が表示されるたびに。
autoload -Uz zmv # best in ~/.zshrc
zmv $'(**/)(*\r*)' $'$1${2//\r}'
(これらのファイルがある最上位ディレクトリから)。
$f
ここでは、ファイル名のみを変更し、他のパス名コンポーネントは変更しないことが重要であるため、使用したくありません。そうすればうまくmv $'a\rb/c\rd' ab/cd
いかないからです。再帰的なグローバル変数を処理するため、まず実行してからmv $'a\rb/c\rd' $'a\rb/cd'
実行する必要があります。mv $'a\rb' ab
zmv
深さ優先((#qoD)
修飾子を追加してください)。
$1
上記の$2
スキーマキャプチャの内容は、ディレクトリ名とデフォルト名にも同じことが当てはまります。(...)
$1
$2
答え2
バッチの名前変更(またはバッチコピー)ファイルの場合、zmv
あなたの友達です。
autoload zmv
zmv -W $'**/*\r' '**/*'
説明する:
zmv
指定されたワイルドカードパターン(here$'**/*\r'
)に一致するファイルの名前を、指定された代替式(here**/*
)に変更します。- この
-W
オプションを使用すると、代替式にワイルドカード文字を使用できます。 - これ
$'…'
通事論\r
キャリッジリターンなどのバックスラッシュ式をサポートします。 **/*
現在のディレクトリのすべてのレベルにあるすべてのファイルと一致します**
(再帰ワイルドカード。
または:
autoload zmv
zmv $'**/*\r' $'${f%\r}'
$f
元のファイル名を示します。${VARIABLE%SUFFIX}
パラメータ拡張form は与えられたサフィックスを削除します。
あなたにおすすめ.zshrc
:
autoload zmv
alias zcp='zmv -C'
alias zln='zln -L'
答え3
説明の説明に従って、これはLinuxでは機能しますが、デフォルトではMacOSでは機能しません。
touch $'file_\r_name'
ls -l --quoting-style=c file_*
-rw-r--r-- 1 hl hauke 0 23. Nov 17:02 "file_\r_name"
find . -name $'*\r*' -exec rename -nv $'\r' '' {} + 2>/dev/null | cat -v
`./file_^M_name' -> `./file__name'
-nv
rename
詳細テスト実行モードに入ります。
cat -v
(後の部分が前の部分を扱う\r
ため)出力が奇妙に見えるので(やや)必要です。\r