как заменить точку на подчеркивание в нескольких именах файлов?

Поскольку точка входа find— это ., фактически ваша pwd. Если точка входа будет, например. /тогда эта часть пути будет добавлена ​​к вашему pwdвот так:

$ find / -type f -name "autosys*"
/path/from/root/to/$HOME/to/pwd/autosys1.txt
2
05.08.2019, 12:02
3 ответа

mvлибо берет один файл и перемещает или переименовывает его, либо берет несколько файлов или каталогов и перемещает их в каталог. Вы не можете переименовать несколько файлов с помощью mv.

Вместо этого:

for name in *.*.fasta.gz; do
    newname=${name%.fasta.gz}         # remove filename suffix
    newname=${newname//./_}.fasta.gz  # replace dots with underscores and add suffix

    mv -i -- "$name" "$newname"
done

Это приведет к перебору всех ваших сжатых файлов fasta в текущем каталоге, содержащих хотя бы одну точку в другом месте имени, кроме суффикса имени файла. Это удалит известный суффикс имени файла (, в котором точки не должны заменяться символами подчеркивания ), а затем заменит все точки символами подчеркивания в оставшемся бите и re -прикрепит суффикс.

Окончательная замена будет работать в оболочке bash, но, возможно, не будет работать в оболочке /bin/sh.

Затем

mv -iиспользуется для переименования файла (запросит подтверждение, если новое имя уже существует ). Двойное тире(--)используется только в том случае, если какое-либо из имен начинается с тире (, они потенциально могут быть восприняты как наборы опций для mv, а двойное тире предотвращает это ).

5
27.01.2020, 21:49

Если у вас perl-renameустановлен (с именем renameв Debian, Ubuntu и других производных от Debian -системах ), вы можете:

rename -n 's/\./_/g; s/_fastq_gz/.fastq.gz/' *fastq.gz

Это сначала заменит все .на _, а затем заменит окончательный _fastq_gzна .fastq.gz.

-nзаставляет его печатать только изменения, которые он должен был бы сделать, без фактического переименования файлов. Как только вы убедитесь, что это делает то, что вы хотите, удалите -n, чтобы фактически переименовать их:

rename  's/\./_/g; s/_fastq_gz/.fastq.gz/' *fastq.gz
8
27.01.2020, 21:49

Почему не работает

*расширяется оболочкой перед запуском команды. Он соответствует существующим файлам. mvне имеет возможности сопоставления с образцом.

Решения

mmv

Эта команда работает примерно так, как вы пытаетесь это сделать. Он не такой мощный, как rename, но проще.

напр.mmv '*.assembled.*.fastq.gz' '#1_assembled_#2fastq.gz'

2
27.01.2020, 21:49

Теги

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