Скопируйте файлы под измененным именем

awk -v blkid=0 -v rmblk=2 '{
      if ( $1 ~ /^\[/) {
            blkid+=1;blkn=NR;print };
      if ( blkid !=rmblk && NR!=blkn )
            print ;
      else if(blkid ==rmblk && NF == 0)
                  print ""}' file.txt

Каждый блок будет иметь идентификатор, начиная с 1 приращения на единицу для каждого блока: blkid .

Идентификатор блока, который вы хотите удалить: rmblk

Каждый блок запускается, когда первое поле начинается с [.

Переменная blkn сохраняет значение NR [первая попытка] [вторая попытка] и т. Д.

3
15.06.2018, 14:03
3 ответа

find+bashsolución:

find $folder -maxdepth 1 -type f -name "*-[0-9].jpg" -exec \
bash -c 'cp "$1" "${1:0:-4}-mini.jpg"' _ {} \;
2
27.01.2020, 21:21

Una forma de hacer esto es agregar el siguiente comando a su secuencia de comandos. Suponga que tiene el nombre original en $originalName, puede usar

cp $originalName $(basename $originalName.jpg)-mini.jpg
0
27.01.2020, 21:21

Вам не нужно findздесь, так как вы просто ищете в одном каталоге, просто цикл оболочки сделает эту работу. Вам также не нужно экранировать точку в шаблоне подстановки имени файла.

for pathname in "$folder"/*-[0-9].jpg; do
    [ -f "$pathname" ] && cp "$pathname" "${pathname%-[0-9].jpg}-mini.jpg"
done

Замена параметра ${variable%pattern}удаляет patternиз конца значения variable.

Тест -fабсолютно уверен, что мы имеем дело с обычным файлом (или символической ссылкой на него ), а не с неправильно названным каталогом.


Используя find, сделайте то же самое:

find "$folder" -maxdepth 1 -type f -name '*-[0-9].jpg' -exec sh -c '
    for pathname do
        cp "$pathname" "${pathname%-[0-9].jpg}-mini.jpg"
    done' sh {} +
1
27.01.2020, 21:21

Теги

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