1

したがって、次のような命名規則を持つディレクトリ内のすべての .mp3 ファイルを検索する必要がある割り当てに問題があります。

Beatles - Lucy in the Sky with Diamonds.mp3

次に、それを次のような形式にする必要があります。

Beatles/Lucy in the Sky with Diamonds.mp3

私は UNIX の初心者ですが、基本的な概念はよく理解しています。

ファイル名から拡張子を「取り除く」方法を知っています (つまり、「Beatles - Lucy in the Sky with Diamonds」が残されます)。

また、ディレクトリ内のすべてのファイルを検索する方法も知っています。

しかし、「-」を検索する方法に慣れていません。

C++ などでは、特定の char ("-") を検索してその int を取得し、部分文字列を作成できることは知っていますが、UNIX ではそのような関数を知りません。

質問に完全に答える完全なコードを探しているわけではありませんが、char を検索してファイル名を編集する方法を知りたいです。

ありがとう。

編集:

nosid が言ったことを使用して、次のようにファイル名をアーティストと曲のタイトルに分割することができました。

artist="${originalFile%% - *}"
song="${originalFile#* - }" 

その部分は機能し、プロパティを分離しますが、ファイルを移動しようとすると新しい問題が発生します。ディレクトリが存在するかどうかを検出する2つのifステートメントがあり、存在しない場合はそのディレクトリを作成します。ただし、ディレクトリ名にアーティスト変数を使用すると、2 つのディレクトリが作成されます。曲の使い方も同様です。

基本的に、次のように mkdir または mv を試したときに、ファイル/ディレクトリ名でスペースが無視されるようにするにはどうすればよいですか。

mkdir ${artist};
mv ${artist}/${song};
4

3 に答える 3

1

ファイルを識別するには、ワイルドカード マッチをループします。

for file in *\ -\ *.mp3; do
    artist="${file%% - *}"
    song="${file#* -  }"
    :
done

ループの本体は、本質的に @nosid の回答と同じです。シェルによっては、パラメーター置換で空白をいじる必要がある場合があります。(たとえば、古いバージョンの Bash の場合はスペースをバックスラッシュするかもしれません。)

于 2013-10-05T10:17:48.803 に答える
0

1 つの方法は、awkプログラムを使用することです。

$echo "Beatles - Lucy in the Sky with Diamonds.mp3" |
awk -F- '{
  gsub(/ *$/, "", $1);
  gsub(/^ */, "", $2);
  print $1 "/" $2}'

これは出力します

Beatles/Lucy in the Sky with Diamonds.mp3

この-F-オプションは、「-」文字でフィールドを分割します。$1「Beatles」(末尾にスペースあり)、$2「Lucy in the Sky with Diamonds.mp3」(先頭にスペースあり)も同様です。2 つのgsubコマンドは、これらのスペースを削除printし、間に「/」を付けて出力します。

于 2013-10-04T23:01:54.000 に答える