Я хочу изменить пакет имен файлов, чтобы удалить букву, например:
Stain-A_1P.fastq to Strain-A_1.fastq
Strain-A_2P.fastq to Strain-A_2.fastq
Я пробовал следующее:
rename 's/P//' *fastq
for file in *; do mv "$file" `echo $file | tr 'P' ''` ; done
С 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)
Используйте rename
команду:
for f in *.fastq; do rename 's/P\./\./' "$f" ; done
's/P\./\./
-perl выражение подстановки :удаляет P
, за которым следует.
(перед расширением файла)