¿Cómo copio un archivo y agrego un número dentro?

3

Este me ha desconcertado: en realidad estoy tratando de hacer una acción personalizada de Thunar para copiar el archivo seleccionado en el mismo directorio agregando un número antes de la extensión, por ejemplo

cp file.ext file_1.ext

Algunos comandos parecen hacer esto automáticamente como mogrify -format(excepto, obviamente, la extensión cambia).

Por ejemplo, me gustaría copiar un archivo de imagen para poder mogrify -resizecopiar (que se sobrescribirá).

mozerella
fuente

Respuestas:

3

La forma común de hacer esto en bash es con la expansión de parámetros . Si la filevariable contiene el nombre del archivo, haga algo como esto:

name=${file%.*}
extension=${file##*.}
i=1
new_file="${name}_${i}.${extension}

cp "$file" "$new_file"

Para usar esto en un script ( duplicate.shdigamos), haga algo como esto:

#!/bin/bash

name=${1%.*}
extension=${1##*.}
infix="${2:-_1}"

cp -v "$1" "${name}${infix}.${extension}"

Entonces llámalo como:

duplicate.sh FILE INFIX
Thor
fuente
Por supuesto, podría envolverlo en una función de shell y copiar el archivo.
slhck
Olvidé que se trataba de copiar, la respuesta modificada.
Thor
2
cp "$name"{,_1}."${extension}se puede usar para eliminar la necesidad de la new_filevariable.
chepner
@chepner Publique eso como respuesta.
slhck
1
por seguridad, se podría incluir un bucle que verifique si ya existe new_file, para evitar que se sobrescriba (algo así como while [ -f "$new_file" ]; do i=i+1; new_file="${name}_${i}.${extension}; done).
Izzy
1

Esta es solo una versión un poco más corta de la respuesta de @ Thor:

name=${file%.*}
extension=${file##*.}

cp "$name"{,_1}."$extension"
chepner
fuente