削除する」? '単一のディレクトリにある複数のファイル名の文字

削除する」? '単一のディレクトリにある複数のファイル名の文字

私のディレクトリには名前に文字を含む多くのファイルがあり、?これらの文字を削除したいと思います?

助けてください?

答え1

rename 's/\?//g' *

すべてのファイルの名前を変更する人

francois@zaphod:~/tmp$ ls
toto_?_  toto_?_1  toto_?_2

francois@zaphod:~/tmp$ rename 's/\?//g' *
francois@zaphod:~/tmp$ ls
toto__  toto__1  toto__2
francois@zaphod:~/tmp$

答え2

あるいは、同様のシェルがbash変数値のパターンに一致する文字列内のすべての項目を(または)に置き換える方法を知っているとします。${variable//pattern/replacement}zshksh

for name in ./*'?'*; do
    mv -i "$name" "${name//'?'/}"
done

これは、現在のディレクトリ内の1つ以上の名前を含むすべての名前を繰り返す短いループです?(隠された名前をスキップ)。これらの名前ごとに、?ファイル名から文字が削除され、結果がファイルの新しいファイル名として使用されます。

パターンの一重引用符は、?単一の文字に一致する特殊なワイルドカード文字で処理されるのを防ぎます(引用符がない場合があります?)。\?またはを使用することもできます[?]

出力に疑問符が表示されている場合は、ls印刷できない文字を表す可能性があります。

削除するこれら'?'、上記のコードの各項目をに置き換えます[![:print:]]。ワイルドカードパターンは、[![:print:]]印刷できない文字と一致します。文字[:print:]クラスはと似ています[:graph:]が、前者は空白文字と一致し、後者は一致しません。ユーザー[![:print:]]会議いいえスペースを削除しながらスペースを削除します[![:graph:]]

関連情報