ファイル名からすべてのハイフンを再帰的に削除する方法

ファイル名からすべてのハイフンを再帰的に削除する方法

フォルダが多く、その中にファイルが1つあります。削除するには、まず名前を一括変更する必要があります。

- (サンプル)

だから

ファイル名 - (サンプル).mp3

~になる

ファイル名.mp3

親フォルダに(サンプル)最後に削除することもできます(サンプル)フォルダから次のコマンドを実行します。

find . -name '*\(sample)*' | while read f; do mv "$f" "${f//\(sample)/}"; done

2回目に再実行すると、埋め込みファイル名から(サンプル)が削除されます(最初の実行では削除されません)。

だから私に残ったのは

ファイル名-.mp3

私が入力したコードに以下のようにハイフンを追加します。

'*\-(sample)*'

動作しません。

一日中オンラインで他の多くのことを試しましたが、何も機能しません。サーバーは「名前の変更」などの特定のコマンドを認識しません。

私はローカルでファイル名を変更するために何千ものサンプルファイルをダウンロードしようとしません。これが私ができることです。

サーバーが Debian を実行しています。

しかし、わからない、多分去るかもしれない。-.mp3大丈夫でしょうか?ちょっと混乱して奇妙に見えますか?ファイル名の先頭にハイフンを残しておくと問題が発生する可能性があることを読んでいましたが、反対側も同じでしょうか?

私は指示をかなりよく従うことができますが(そしてよりよく理解するために常に答えを最初に研究します)、私は専門家ではないので、この点に留意してください。

誰でも他の提案があれば良いでしょう。ハイフンを除いて、フォルダ/ファイル名から必要なものは何でも削除できます。

ありがとうございます!

答え1

まず、最も低い(最も深い)一致から始めますfind。そうしないと、親ディレクトリの名前を変更でき、そこで子ディレクトリとファイルが見つからないため、次の名前変更が失敗する可能性があります。 2番目はrename(IMHO)より簡単なツールです。 3番目は直接実行を通してですfind

find -depth -name '*-(sample)*' -exec rename --nopath 's:-\(sample\)::' '{}' +

-n最初にテストする場合は、このオプションをオプションとして使用してくださいrename。練習を実行し、変更を表示します。この--nopathオプションは、以前のディレクトリの名前を最初に変更しないようにするために必要です。

関連情報