Перемещение файлов, перечисленных в текстовом файле, с сохранением/созданием пути

С bashили любой другой оболочкой POSIX:

for f in *.fastq; do ext="${f##*.}"; echo mv -- "$f" "${f%?.*}.${ext}"; done
  • for f in *.fastqперебирает .fastqфайлы

  • ext="${f##*.}"получает(${f##*.})и сохраняет расширение файла как переменнуюext

  • ${f%?.*}получает часть до символа, который следует за одним символом до последнего.

  • mv "$f" "${f%?.*}.${ext}"выполняет операцию переименования с добавлением расширения с обрезанным префиксом

Это пробный -пробег;падение echoдля фактического действия:

for f in *.fastq; do ext="${f##*.}"; mv -- "$f" "${f%?.*}.${ext}"; done

Если у васrename(prename):

rename -n 's{^(./.*).(\..*)}{$1$2}s'./*.fastq
  • Мы используем жадное сопоставление с .*для сопоставления до последней части.

  • Первая захваченная группа содержит часть до предпоследнего символа перед.

  • Вторая захваченная группа содержит часть после последней .(, включая.)

Бросить -nдля реального действия:

rename 's{^(./.*).(\..*)}{$1$2}s'./*.fastq

Пример:

% ls -1d -- *.fastq
Stain-A_1P.fastq
Strain-A_2P.fastq

% for f in *.fastq; do ext="${f##*.}"; echo mv -- "$f" "${f%?.*}.${ext}"; done 
mv -- Stain-A_1P.fastq Stain-A_1.fastq
mv -- Strain-A_2P.fastq Strain-A_2.fastq

% rename -n 's{^(./.*).(\..*)}{$1$2}s'./*.fastq
rename(./Stain-A_1P.fastq,./Stain-A_1.fastq)
rename(./Strain-A_2P.fastq,./Strain-A_2.fastq)
1
20.08.2019, 21:42
0 ответов

Теги

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