検索と sed は特殊文字を置き換えます。

検索と sed は特殊文字を置き換えます。

Synology NASで多くのファイルの名前を変更する簡単な方法を探しています。見つかり、sed利用可能ですが使用できませんrename

以下を使用して、これらのファイルとフォルダのリストを取得できます。

find . \( -type d -name "@*" -prune \) -o \( -name "**" \) -print

上記のfindステートメントは、Synology bashの「」に置き換えられた「/」文字を含むすべてのファイルを表示します。

変更する必要があるすべての特殊文字は次のとおりです。  / \ : ? ' ’ ´ ’ 

使用されるプラットフォームおよびファイル共有プロトコルに応じて、これらの文字は異なるように見えたり、異なって表示されたり、まったく表示されなかったり、さまざまな種類の問題を引き起こしたりします。以下では、Synology bashでこれらの文字を見つけることができます。 -name "**" -o -name '*\\*' -o -name "*:*" -o -name "*\?*" -o -name "*\'*" -o -name "*´*" -o -name "*`*"

見つかったすべてのファイルとディレクトリでこれらの文字をどのように変更できますか? 「/」文字から始めます。

助けてくれてありがとう!

ゲイリー

ベストアンサー1

findコマンドが名前を変更したいファイルセットと正確に一致し、名前を「安全な」ファイル名に変更したいとします。ファイル名の正確な文字がわからない場合は、提案のみを提供できますが、ここには2つあります。

  1. 奇妙な文字を削除します。これは、文字をbash置き換えることによって基本的に処理できると仮定します。

     find . -depth \( -type d -name "@*" -prune \) -o \( -name "**" -execdir \
         bash -c 'echo "Processing $PWD"; for f; do echo mv -- "$f" "${f///}"; done' _ {} + \)
    
  2. 既知の文字だけが保持されます。tr保存したい文字セットが含まれていることを確認してください。

     find . -depth \( -type d -name "@*" -prune \) -o \( -name "**" -execdir \
         bash -c 'echo "Processing $PWD"; for f; do echo mv -- "$f" "$(tr -cd '[:alnum:][:punct:][:space:]' <<<"$f")"; done' _ {} + \)
    

どちらの場合も、echoデバッグをアクティブなステートメントに変換するには削除してください。

おすすめ記事