ファイルセットの名前を拡張子以外は同じファイル名に変更したいと思います。彼らは私のホームディレクトリ全体に散らばっており、正確な場所はわかりませんが、削除する拡張子は知っています。
これを行うには、1つのコマンドのみが必要です。
これはコマンドの一部です。
$ find ~/ -type f -name "*.hhs" -exec mv {} <I DO NOT KNOW> \;
<I DO NOT KNOW>
あなたの提案に置き換えることができる場所はどこですか?たとえば、次のように交換してみました。
`basename {} .hhs`
私には効果がありません。
はい
ファイルfile1.jpg.hhs
とファイルが見つかったら、次のようにfile2.jpg.hhs
名前を変更したいと思います。file1.jpg
file2.jpg
答え1
PERL拡張機能がある場合、またはインストールできる場合rename
(apt-get install rename
Debianベースのディストリビューションの場合)...
find ~ -type f -name "*.hhs" -exec rename -d ".hhs" {} +
このオプションは-d
指定された--delete
文字列を削除します。
答え2
.hhs
ファイル名からファイル名のサフィックスを削除するためのツールが必要です。find
これを行う方法はないので、次の方法で他のユーティリティを呼び出す必要があります-exec
。
find "$HOME" -type f -name '*.hhs' -exec sh -c '
for pathname do
cp -i "$pathname" "${pathname%.hhs}"
done' sh {} +
ここではこれを使用していません。basename
これは、見つかったパス名からディレクトリパスも削除するためです(再度挿入すると使用できますが、dirname
汚れたコードが生成されます)。
代わりに、できるだけ多くのパス名を見つけてインラインシェルスクリプトを呼び出し、そのパス名を介してスクリプトループを実行して個々のファイルをコピーします。新しい名前は、.hhs
値の末尾から文字列を削除する標準パラメータ置換を使用して構成されます$pathname
。
関連: