Как переместить несколько файлов в папку с таким же именем

У меня есть несколько файлов вроде этого:

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, так что любая помощь будет оценена. Спасибо

0
задан 14 September 2020 в 20:51

3 ответа

В этом конкретном случае, вероятно, наиболее простым способом является использование встроенного цикла for следующим образом:

for i in {01..08}; do echo mv *-bcF_01_bcR_${i}* bcF_01_bcR_${i}/; done 
  • удалить echo ] для внесения фактических изменений в файловую систему.
2
ответ дан 4 January 2021 в 08:22

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 .

2
ответ дан 4 January 2021 в 08:22

Использование переименования для перемещения файлов:

$ rename -n 's/.*(bcF_[0-9]+_bcR_[0-9]+).*/$1\/$&/' *.fastq

Удалите -n, ​​когда почувствуете, что готовы переместить файлы.

2
ответ дан 4 January 2021 в 08:22

Другие вопросы по тегам:

Похожие вопросы: