web-dev-qa-db-ja.com

特定のパターンに一致するファイルを移動する

特定のパターンを持つフォルダー内のファイルを移動先フォルダーに移動するにはどうすればよいですか?

区切り文字「-」で区切られた4番目の列の[00-09]の範囲の名前のファイルを移動したい。

ls | cut -d "-" -f 4 | grep ^[00-09]

これらのファイルを表示します:

UNCID_376947.TCGA-DD-A118-01A-11R-A131-07.110525_UNC12-SN629_0087_BC03HWABXX.7.trimmed.txt
UNCID_377115.TCGA-CC-5263-01A-01R-A131-07.110525_UNC12-SN629_0087_BC03HWABXX.5.trimmed.txt
UNCID_377252.TCGA-DD-A114-11A-12R-A131-07.110525_UNC12-SN629_0087_BC03HWABXX.6.trimmed.txt
3
r.bot

Glob式を使用します。

mv your_dir/*?-*?-*?-0[0-9]* new_dir/

それをテストするには、まずls your_dir/*?-*?-*?-0[0-9]*を実行して、目的のファイルと一致することを確認します。

*?-*?-*?-0[0-9]*は、文字+ -を3回、次に0および任意の文字を意味します。

テスト

$ ls
another_dir/  aa-03A-b  aa-b-03A-b  aa-b-c-03A-b  a-b-c-03A-b  a-b-c-23A-b
$ mv *?-*?-*?-0[0-9]* another_dir/
$ ls another_dir/
aa-b-c-03A-b  a-b-c-03A-b
10
fedorqui

「forループ」を使用できます。

for FILE in 'file-list'
do
  echo "$FILE"
  mv "$FILE" /your/destination/
done

説明:

'file-list'は、使用するファイルのリストを取得するメソッドに置き換える必要があります。たとえば、ファイルにリストが既にある場合は$(cat files.txt)、ディレクトリ内のファイルが同じパターンで始まる場合はpattern*、リストを取得するためにfindを使用する場合は$(find -iname "*pattern*") 。
出力は変数FILEに次々に格納されます。 dodoneの間のコマンドは、各要素に対して実行されます。 mvコマンドをループに追加する前に、echo "$FILE"を使用して、コマンドが正しいファイルと一致するかどうかを確認できます。

2
Wayne_Yux