私の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
その場合は、代わりに-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
。そうでなければできますダウンロードそしてインストールしてみてくださいこのレシピを試してください。