特定のパターンを持つフォルダー内のファイルを移動先フォルダーに移動するにはどうすればよいですか?
区切り文字「-」で区切られた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
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
「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
に次々に格納されます。 do
とdone
の間のコマンドは、各要素に対して実行されます。 mv
コマンドをループに追加する前に、echo "$FILE"
を使用して、コマンドが正しいファイルと一致するかどうかを確認できます。