2017-01-16 12 views
2

私はmacOSを実行していて、何千ものjpgファイルをすばやくソートする方法を探しています。ファイル名の一部に基づいてフォルダを作成し、そのファイルをそのファイルに移動する必要があります。mac OS - ファイル名の一部に基づいてフォルダを作成する

単純に、私はこれらのファイルを入れたい:

これらのフォルダに
x_not_relevant_part_of_name.jpg 
x_not_relevant_part_of_name.jpg 

y_not_relevant_part_of_name.jpg 
y_not_relevant_part_of_name.jpg 

x 
y 

「X」の長さと名前の「Y」の部分が異なる場合があることに注意してください。

maxOSの自動解決策はありますか? 私はAutomatorとTerminalを使ってみましたが、プログラマーではないので、うまくいきませんでした。ターミナルではbashパラメータ置換でfindを使用して

答えて

2

はおそらく動作します:(彼らはまだ存在しない場合)

find . -type f -name "*jpg" -maxdepth 1 -exec bash -c 'mkdir -p "${0%%_*}"' {} \; \ 
-exec bash -c 'mv "$0" "${0%%_*}"' {} \; 

これは、一致するすべてのファイル名の接頭辞を使用してディレクトリを再帰的に作成するためにfindでのbashパラメータ置換を使用していますjpg。最初のアンダースコア(_)の前に文字を取り、一致するファイルを適切なディレクトリに移動します。コマンドを単にcdのように使用するには、整理したいディレクトリに入力します。 maxdepthオプションを使用せずにコマンドを複数回実行すると、さらに多くのフォルダが生成されることに注意してください。 maxdepthオプションを使用してコマンドが動作できる「深さ」を制限します。

${parameter%word} 
${parameter%%word} 

ワードは単にファイル名の拡張と同様のパターンを生成するように拡張されます。パターンが展開された パラメータの末尾の部分と一致する場合、展開の結果は、最も一致するパターン( '%'の場合)または の最長の一致するパターン( '%% 'の場合)が削除されました。

↳GNUバッシュ:Shell Parameter Expansion

+1

魅力的な作品です!名前を変更する時間を節約したので、私はあなたにビールを持っています。ありがとうございます。 – Adam

3

私はそれをすべてがうまくいかない場合はどこか安全な場所に最初のファイルをバックアップします。そして、あなたはこれであなたがやりたいことができ

brew install rename 

:それから私はhomebrewをインストールし、その後でrenameをインストールします

rename --dry-run -p 's|(^[^_]*)|$1/$1|' *.jpg 

それが正しいようであれば、--dry-runを削除し、再度実行します。

このコマンドを見てみましょう。

  • --dry-runがちょうどコマンドは、実際に必要な

  • 年代として任意の中間のパス(つまりディレクトリ)を作成する意味-p何

  • をやってなくてどうなるのかと言う意味| ...| '私はすぐに説明します

  • * .jpgは、すべてのJPGファイルでコマンドを実行することを意味します。

単一引用符で面白いビットは、それがbで代替事aを意味s|a|b|で最も単純な形式で、実際に置換です。この特定のケースでは、aはキャレット(^)で、ファイル名の先頭を意味し、[^_]*は下線ではない任意の数を意味します。私はそれを括弧で囲んでいるので、aの括弧の中の最初のものであるので、bの部分を$1という部分に戻すことができます。 bの部分はを意味します。「アンダースコアの前にあったものはどれもに続き、スラッシュは「アンダースコアの前にあったものはどれも」です。

+0

ねえ!あなたのソリューションはうまく動作しますが、@ l'L'l'l'l'l'l'l'l'l'l'l'l'l'l'l'solのソリューションは、追加の "ありがとうございます! – Adam

+0

Wot?ビールはない? ;-)クール、それはあなたのためにうれしい嬉しい。 –

+1

@ MarkSetchell: –

関連する問題