2

つまり、基本的に、100を超えるファイルを含むサブフォルダーがたくさんあるフォルダーがあります。すべてのmp3ファイル(jpgなどでこれを行う必要があるため、実際には一般的な拡張子)を取得して、元のディレクトリの新しいフォルダに移動したいと思います。したがって、基本的にファイル構造は次のようになります。

/.../dir/recup1/file1.mp3

/.../dir/recup2/file2.mp3

...など。

そして私はそれをこのように見せたい:

/.../dir/music/file1.mp3

/.../dir/music/file2.mp3

...など。

私はこれらの線に沿って見たbashスクリプトを使用すると考えました:

#!/bin/bash
STR=`find ./ -type f -name \*.mp3`

FILES=(echo $STR | tr ".mp3 " "\n")

for x in $FILES
do
    echo "> [$x]"
done

mv今のところエコーしているだけですが、最終的には正しいフォルダに移動するために使用したいと思います。trは各文字を区切り文字と見なすため、明らかにこれは機能しません。したがって、皆さんがより良いアイデアを持っている場合は、それをいただければ幸いです。

(参考までに、私はネットブックUbuntuを実行しているので、Windowsの検索に似たGUIの方法があれば、それを使用することに反対することはありません)

4

2 に答える 2

1

musicフォルダが存在する場合、以下が機能するはずです-

find /path/to/search -type f -iname "*.mp3" -exec mv {} path/to/music \;

Aは、 (通常は入力するか、シェルによる解釈を避ける必要があります)または。-exec commandで終了する必要があります。違いは、コマンドがファイルごとに1回呼び出されることと、コマンドがすべてのファイル名で可能な限り少ない回数(通常は1回ですが、コマンドラインの最大長があるため分割される可能性があります)に呼び出されることです。 。;\;';'+;+

于 2012-01-02T22:19:20.793 に答える
0

あなたはこのようにそれを行うことができます:

find /some/dir -type f -iname '*.mp3' -exec mv \{\} /where/to/move/ \;

パーツは\{\}、見つかったファイル名/パスに置き換えられます。パーツは\;パーツの終わりを設定-execします。省略できません。

見つかったものを印刷する場合は、次の-printようなフラグを追加するだけです。

find /some/dir -type f -iname '*.mp3' -print -exec mv \{\} /where/to/move/ \;

HTH

于 2012-01-02T22:18:14.623 に答える