0

Linux初心者(学びたい!)として、私はブラウズして検索してきましたが、残念ながら私の問題に対する適切な解決策を思いつくことができませんでした. 別のディレクトリに移動したい(また作成する)いくつかのファイル(たくさん)を含むディレクトリがあります。もう少し詳しく言うと:

私のディレクトリは /data/myowndir/ で、ファイルにはそれぞれ次のような名前が付いています

  • CV02_T1_[ランダム文字].REC
  • PM03_T2_[ランダムな文字].PAR

次のように、各ファイルを (ファイル名の) それぞれの最初の 7 文字で、このディレクトリ内のサブディレクトリに移動したいと思います。

  • CV02_T1_*.REC ---> /data/myowndir/CV02_T1
  • CV02_T1_*.PAR ---> /data/myowndir/CV02_T1 (前回と同じディレクトリ)
  • PM03_T1_*.REC ---> /data/myowndir/PM03_T1
  • PV05_T2_*.PAR ---> /data/myowndir/PV05_T2

したがって、複数のファイルを移動して、これらの複数のディレクトリを作成たいと考えています。

ただし、2 つの制約があります。

  1. このディレクトリには、移動したくない拡張子 .nii のファイルも含まれています。
  2. 次に、一部のファイルには文字列sT13を含むファイルがあり、次のように別のディレクトリに移動したいと考えています。

PM03_T2_[ランダムな文字]sT13[ランダムな文字].PAR ---> /data/myowndir/PM03_struc

(したがって、ファイル名の最初の 5 文字と追加の文字列 [struc] のみが新しいディレクトリ名に追加されます)

誰でもこれを行う方法を知っていますか? スクリプトを作成する必要がありますか、それともコマンド ターミナルから実行できますか? 同様の質問に対する他の回答と、mv、mmv、find、while、for、rsync のマニュアル ページを読んでいます。しかし、私はそれをまとめる方法がわかりません。


編集:私の質問が暗示されているほど具体的すぎる場合は、最初に言い直してより明確にし、制約を削除させてください:

ファイル名の最初の部分に基づいて、複数のファイルをディレクトリから複数のサブディレクトリに移動するにはどうすればよいですか?

4

1 に答える 1

0

ファイル名の先頭に7文字のシーケンスが2つ以上あると想定しています(そうしないと、bash拡張子を持つコマンドをmvすることができるためです)。bash では、最初に文字列が途中にある「特別な」ファイルを新しいディレクトリに移動します。

cd  /data/myowndir/
for filename in *sT13*.*; do
   if [ "${filename: -4}" != ".nii" ]; then
      dir_name=${filename:0:5};
      mkdir -p ${dir_name}struc
      mv -i $filename ${dir_name}struc/${filename}
   fi
done

次に、他のすべてのファイルをそれぞれの新しいフォルダーに移動します。

for filename in *.*; do
   if [ "${filename: -4}" != ".nii" ]; then
      dir_name=${filename:0:7};
      mkdir -p $dir_name
      mv -i $filename $dir_name/${filename}
   fi
done

コマンドの-pオプションmkdirにより、ディレクトリが既に存在する場合にエラーが発生しないことが保証されます。${string:0:7}文字列の最初の 7 文字を選択します

于 2013-08-19T09:12:07.983 に答える