Tengo una carpeta con varios archivos ABC. * (Hay aproximadamente 100 de estos archivos). Quiero duplicarlos todos en archivos nuevos con nombres que comiencen con DEF. *
Entonces yo quiero
ABC.Page1
ABC.Page2
ABC.Topic12
...etc
copiado a
DEF.Page1
DEF.Page2
DEF.Topic12
...etc
¿Cuál es la forma más sencilla de hacer esto con un comando por lotes (en BASH o similar)? Estoy pensando en algo relacionado con sed o awk o xargs, pero tengo dificultades para descubrir la sintaxis. Podría escribir un script de Python, pero creo que probablemente haya una solución de línea de comandos que no sea demasiado complicada.

mcadministrador de archivos venerable tiene un soporte más extenso para este tipo de cambios de nombre masivos.tartampoco es un pollo de primavera. Vea mi respuesta para un ejemplo.Respuestas:
¿Qué tal algo como esto en bash:
puedes probarlo poniendo echo delante del comando cp:
fuente
cp /usr/local/lib/libboost* /usr/local/lib/libboost*con la verificación de eco.Para hacer esto de manera eficiente con una gran cantidad de archivos, es mejor evitar iniciar un
cpproceso diferente para cada uno. Una forma sería copiarlos y luego renombrarlos usandoprename(renameestá enlazado a esto por defecto en distribuciones basadas en Debian). Usando esto y Linuxmktemp:Actualizar
En realidad,
paxpuede ser una mejor manera de ir aquí:Desafortunadamente, a pesar de
paxser POSIX y Linux Standard Base, pocas distribuciones lo incluyen por defecto.fuente
tarHará esto por usted realmente rápido.PRUEBA
Primero creé 2 directorios y 10 archivos:
Luego los copié:
TRANSFORMAR
Entonces GNU
taraceptará unsed --transform=EXPRESSIONcambio de nombre de archivo. Esto incluso puede renombrar solo algunos de los archivos. Por ejemplo:Entonces esa es una ventaja.
CORRIENTE
También considere que esto es solo dos
tarprocesos, y que no se alterará independientemente de su recuento de archivos.tarestá tan optimizado como podría desear que sea. Esto nunca tendrá problemas de conteo de argumentos o procesos secundarios fuera de control. Esto es solo A> B hecho.ARGUMENTOS
Utilizo 7 argumentos distintos combinados entre mis dos
tarprocesos aquí. El más importante se enumera aquí primero:... y al otro lado del
|pipe...fuente
paxsolución para esta pregunta. Lo agregaría a mi respuesta, pero creo que es más adecuado aquí -pax -rws '/^ABC/DEF/' ABC.* .paxse especifica POSIX, de ahí elpax.paxpuede ser POSIX, pero desafortunadamente rara vez se instala por defecto.Si no le importa usar una herramienta menos estándar, le recomiendo usar mmv (movimiento en masa) que fue escrito para este tipo de tareas. Usando
mcp(copia masiva), que es parte de la suite, simplemente podría hacerNo es exactamente fácil encontrar paquetes de descarga. Aquí se puede encontrar el paquete Debian actual (que Arch también usa en AUR) para compilar en casa .
fuente
apt-get install mmvEn zsh, ponga las siguientes líneas en su
.zshrc:Luego, en la línea de comando, puede ejecutar
o simplemente
En otro shell, siempre que tenga instalado zsh:
fuente
Podrías hacer esto:
fuente
"${i#*.}"bit?Puede hacer esto: http://www.projectik.eu/index.php/programovanie/linux/item/243-linux-kopirovanie-suborov-vo-vlakne Aquí hay un ejemplo
fuente