У меня есть несколько файлов вроде этого:
round3-bcF_01_bcR_01.R1.fastq
round3-bcF_01_bcR_01.R2.fastq
round4-bcF_01_bcR_01.R1.fastq
round4-bcF_01_bcR_01.R2.fastq
round3-bcF_01_bcR_02.R1.fastq
round3-bcF_01_bcR_02.R2.fastq
round4-bcF_01_bcR_02.R1.fastq
round4-bcF_01_bcR_02.R2.fastq
и продолжается до этой формы:
round3-bcF_12_bcR_08.R1.fastq
round3-bcF_12_bcR_08.R2.fastq
Кроме того, у меня есть разные папки вроде этих:
bcF_01_bcR_01
bcF_01_bcR_02
bcF_01_bcR_03
и т.д..... пока
bcF_12_bcR_08
я перемещаю файлы с этой строкой:
mv *-bcF_01_bcR_01* bcF_01_bcR_01
Следовательно, в каждой папке должно быть 4 файла, но это занимает у меня вечность, потому что я должен запустить 96 копий кода ( у меня больше копий, поэтому у меня более 96 папок).
Все, что я хочу - это переместить файлы с этой частью имени "bcF_01_bcR_01" в папки с тем же именем. Я новичок с bash, так что любая помощь будет оценена. Спасибо
В этом конкретном случае, вероятно, наиболее простым способом является использование встроенного цикла for
следующим образом:
for i in {01..08}; do echo mv *-bcF_01_bcR_${i}* bcF_01_bcR_${i}/; done
echo
] для внесения фактических изменений в файловую систему. mmv
(из одноименного пакета) полезен для таких случаев:
$ mmv -n '*-bcF_01_bcR_*.*' 'bcF_01_bcR_#2/'
round3-bcF_01_bcR_01.R1.fastq -> bcF_01_bcR_01/round3-bcF_01_bcR_01.R1.fastq
round3-bcF_01_bcR_01.R2.fastq -> bcF_01_bcR_01/round3-bcF_01_bcR_01.R2.fastq
round3-bcF_01_bcR_02.R1.fastq -> bcF_01_bcR_02/round3-bcF_01_bcR_02.R1.fastq
round3-bcF_01_bcR_02.R2.fastq -> bcF_01_bcR_02/round3-bcF_01_bcR_02.R2.fastq
round4-bcF_01_bcR_01.R1.fastq -> bcF_01_bcR_01/round4-bcF_01_bcR_01.R1.fastq
round4-bcF_01_bcR_01.R2.fastq -> bcF_01_bcR_01/round4-bcF_01_bcR_01.R2.fastq
round4-bcF_01_bcR_02.R1.fastq -> bcF_01_bcR_02/round4-bcF_01_bcR_02.R1.fastq
round4-bcF_01_bcR_02.R2.fastq -> bcF_01_bcR_02/round4-bcF_01_bcR_02.R2.fastq
Здесь # 2
относится ко второму совпадению подстановочного знака в выражение * - bcF_01_bcR _ *. *
- вы можете легко расширить его, чтобы выполнять несколько замен в одном кадре, например,
mmv -n '*-bcF_*_bcR_*.*' 'bcF_#2_bcR_#3/'
Удалите -n
, чтобы фактически делать ходы. Если вы используете zsh
, у него есть загружаемый эквивалент zmv
.
Использование переименования для перемещения файлов:
$ rename -n 's/.*(bcF_[0-9]+_bcR_[0-9]+).*/$1\/$&/' *.fastq
Удалите -n, когда почувствуете, что готовы переместить файлы.