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 [первая попытка] [вторая попытка]
и т. Д.
find
+bash
solución:
find $folder -maxdepth 1 -type f -name "*-[0-9].jpg" -exec \
bash -c 'cp "$1" "${1:0:-4}-mini.jpg"' _ {} \;
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
Вам не нужно 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 {} +