検索/名前変更を使用して複数のファイル名を変更する方法

検索/名前変更を使用して複数のファイル名を変更する方法

私のSambaサーバーのディレクトリ/サブディレクトリに特殊文字を含む多くのファイルがあります。問題は、Windowsを使用してファイルを表示しようとすると、ファイル(特殊文字を含む)が表示されないことです。そのため、特殊文字でファイル名を変更するコマンド(下)を作成しましたが、名前が変更されたファイルをディレクトリ/サブディレクトリに戻すことは機能しません。

find . -type f -exec rename -v 's/[^a-zA-Z0-9 &](?=[^.]*\.)/_/g' '{}' \;

下部には、名前を変更するファイルを含む現在のディレクトリを公開しました。

./dir 1/fil[special char]e3.jpg
./dir 1/another dir2/m[special char]r.file1.txt
./dir 1/another dir2/file[special char]2.doc
./dir 3/next dir4/dir 5/fi[special char]le5.xml
./file 4.zip

予想される - 上記のコマンドを使用した後(ディレクトリ/サブディレクトリのファイル):

./dir 1/fil_e 3.jpg
./dir 1/another dir2/m_r_file1.txt
./dir 1/another dir2/file_2.doc
./dir 3/next dir4/dir 5/fi_le5.xml
./file 4.zip

現実 - コマンドを実行する同じフォルダ内のファイル:

__dir 1_fil_e 3.jpg
__dir 1_another dir 2_m_r_file1.txt
__dir 1_another dir 2_file_2.doc
__dir 3_next dir4_dir 5_fi_le5.xml
__file 4.zip

2つの質問があります。

  1. ファイル名からパス名を除外するには?
  2. ファイルをディレクトリに入れるには?

答え1

その場合は、代わりに-execdirオプションを使用してください。find-exec

  • -exec各パスを引数として、ルートでコマンドを実行します。
  • -execdir各ファイル名を引数として使用して、ターゲットディレクトリからコマンドを実行します。

したがって、

find . -type f -execdir rename -v 's/[^a-zA-Z0-9 &](?=[^.]*\.)/_/g' '{}' \;

この回答が公開されたので、rename質問とこの回答で参照されているコマンドは代替案に置き換えられましたrename [options] expression replacement file…。ここに表示されているコンテンツは、お使いのrenameシステムで利用できる場合がありますprename。そうでなければできますダウンロードそしてインストールしてみてくださいこのレシピを試してください

関連情報