拡張子なしで同じファイル名でファイル名を変更するには、findコマンドを使用します。

拡張子なしで同じファイル名でファイル名を変更するには、findコマンドを使用します。

ファイルセットの名前を拡張子以外は同じファイル名に変更したいと思います。彼らは私のホームディレクトリ全体に散らばっており、正確な場所はわかりませんが、削除する拡張子は知っています。

これを行うには、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.jpgfile2.jpg

答え1

PERL拡張機能がある場合、またはインストールできる場合renameapt-get install renameDebianベースのディストリビューションの場合)...

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

関連:

関連情報