Как удалить определенную часть имени файла для нескольких имен файлов в macOS

Как удалить определенную часть имени файла для нескольких имен файлов в macOS

У меня эти файлы находятся в каталоге.

Mabel-A10_GTAGAGGA_L001_R1_001.fastq.gz
Mabel-A5_GGACTCCT_L001_R1_001.fastq.gz
Mabel-A11_GCTCATGA_L001_R1_001.fastq.gz
Mabel-A6_TAGGCATG_L001_R1_001.fastq.gz

Я хочу, чтобы результат выглядел так.

Mabel-A10_L001_R1_001.fastq.gz
Mabel-A5_L001_R1_001.fastq.gz
Mabel-A11_L001_R1_001.fastq.gz
Mabel-A6_L001_R1_001.fastq.gz

решение1

Вы можете попробовать переименовать их как-то так:

for i in *
do
o=$(echo $i|awk -F_ '{print $1,$3,$4,$5}')
mv "$i" "$o"
done

решение2

Этот скрипт выведет команды оболочки, которые выполняют серию команд «mv» для выполнения вашей задачи:

for FILE in *.fastq.gz
do
    L="${FILE%%_*}_"
    R="${FILE#${L}*_}";
    printf 'mv -vi "%s" "%s"\n' "$FILE" "$L$R"
done

Запустите его один раз и проверьте вывод. Если файлов много, вы можете использовать lessдля просмотра команд.

Если все в порядке, выполните команду еще раз и направьте вывод в bash.

Он работает, устанавливая переменную L на все, что слева от первого подчеркивания в имени файла, плюс само подчеркивание. Затем он формирует строку R, удаляя строку в L из начала имени файла и удаляя далее до следующего подчеркивания.

mv -vi "Mabel-A10_GTAGAGGA_L001_R1_001.fastq.gz" "Mabel-A10_L001_R1_001.fastq.gz"
mv -vi "Mabel-A11_GCTCATGA_L001_R1_001.fastq.gz" "Mabel-A11_L001_R1_001.fastq.gz"
mv -vi "Mabel-A5_GGACTCCT_L001_R1_001.fastq.gz" "Mabel-A5_L001_R1_001.fastq.gz"
mv -vi "Mabel-A6_TAGGCATG_L001_R1_001.fastq.gz" "Mabel-A6_L001_R1_001.fastq.gz"

Связанный контент