something .pdf
代わりに、いくつかのファイル名が正しく指定されていないディレクトリがありますsomething.pdf
。ファイル名からスペースを削除するために使用できる簡単な方法はありますか?
頑張りましたfind -name "* .pdf" -type f | rename 's/ //g'
しかし、それはうまくいきませんでした。
答え1
zshでは、次のコマンドを使用して簡単に実行できます。zmv
機能。autoload -U zmv
yoursと入力する~/.zshrc
か、シェルで一度実行してから、次の操作を行います。
zmv '* .pdf' '${f// /}'
これにより、ファイル名のすべてのスペースが削除されます。.pdf
拡張前にアイテムのみを削除する場合:
zmv '* .pdf' '${f# .pdf}.pdf'
または、逆参照として使用できるグループを区切るには、括弧を使用してください。
zmv '(*) .pdf' '$1.pdf'
サブディレクトリでも操作を実行するには、次の手順を実行します。
zmv '**/* .pdf' '${f# .pdf}.pdf'
(**/)
または(代わりに使用する必要があります(**)/
):
zmv '(**/)(*) .pdf' '$1$2.pdf'
Linuxでzshの有無にかかわらず、ファイル名に次のような誤った空白がある場合:
rename \ .pdf .pdf *\ .pdf
または、元の名前にスペースが1つしかない場合:
rename ' ' '' *\ .pdf
サブディレクトリでも作業したい場合は、ksh93≥o +またはbash≥4で**
サブディレクトリのファイルを一致させるために使用できます。 Bashでは、まずksh93をshopt -s globstar
実行し(この行をに入力する必要があります~/.bashrc
)。set -o globstar
rename \ .pdf .pdf **/*\ .pdf
bashはディレクトリに再帰するときにシンボリックリンクに従います。
利点がない場合は、再帰を**
使用できますfind
。
find . -name '* .pdf' -exec rename ' .pdf' .pdf {} +
Debianとその派生製品(Ubuntuを含む)とほとんどの非Linuxシステムでは、コマンドはperl
置換rename
される文字列と置換文字列の代わりにPerl式を引数として使用するという点で異なります。rename.ul
上記のコマンド(Debianとその派生から)またはPerlと一緒に使用してくださいrename
。
rename 's/ \.pdf$/.pdf/' -- *\ .pdf # strip the space before the extension
rename 's/ //g' -- *\ .pdf # strip all spaces
答え2
これにより、誤って上書きされるのを防ぐことができます(重要な場合)。
IFS=$'\n'
for i in $(find . -name '* .pdf')
do
mv -i "$i" "${i% .pdf}.pdf"
done
対話式シェルでこのコマンドを実行している場合は、IFSを変更した直後に終了できます。