各ファイルが別々のサブフォルダにある何千ものファイルを抽出する方法は?

各ファイルが別々のサブフォルダにある何千ものファイルを抽出する方法は?

3,000人の対象の映像データを含むフォルダがあります。各テーマのフォルダには他の多くのフォルダがあります。ループを使用して各サブフォルダから1つのファイルを抽出し、別のディレクトリに移動し、患者IDに基づいて名前を変更したいと思います。たとえば、/imaging/data/1100232/free Surfer/MRI/lh_ribbon.mgz ここで、1100232 フォルダ名は患者ごとに変更され、患者/フォルダは 3,000 です。各患者のlh_ribbon.mgzファイルを抽出し、患者IDに基づいてファイル名を変更したいと思います。私はLinuxに初めて触れました。誰でも助けることができますか?ありがとう

ベストアンサー1

お客様は新規ユーザーなので、このソリューションを段階的に構築します。

findA次のすべてのファイルを検索/imaging/

find /imaging/ -iname *.mgz

-exec \;見つかった各ファイル(で始まる)に対してコマンドを1回実行するには、1つを追加しますecho(ファイル名はで示されています{})。

find /imaging/ -iname *.mgz -exec echo {} \;

単純なコマンドよりも複雑なスクリプトを使用して、ターゲットディレクトリと見つかったファイル名$ 1と$ 2を渡すsh -cために使用されます。-exec

find /imaging/ -iname *.mgz -exec sh -c 'echo $1 $2' sh {} "/path/to/store/patient/files/" \; 2>/dev/null

最後に、3番目のディレクトリの患者IDから新しいファイル名を形成し、新しい患者IDをファイル名として使用して、以前の場所から新しい場所にコピーします。

find /imaging/ -iname *.mgz -exec sh -c 'p=${1#/*/*/}; p=${p%%/*}; echo cp $1 $2$p.mgz' sh {} "/path/to/store/patient/files/" \; 2>/dev/null

メモ。コミットする前に実行し、出力が正しいことを確認できるようにcpコマンドを残しました。echoすべてが問題ない場合は削除してecho実行してください。

おすすめ記事