GNU/Linux >> Tutoriales Linux >  >> Ubuntu

¿Cambiar el nombre de un archivo al nombre del directorio principal en la terminal?

Tengo que lidiar con una gran cantidad de archivos anidados dentro de los directorios (un archivo por directorio), parecido a esto:

fred/result.txt
john/result.txt
mary/result.txt
...

Actualmente estoy usando el siguiente comando para procesar cada uno de esos archivos:

find . -maxdepth 1 -type d ( ! -name . ) -exec bash -c "cd '{}' && processResult result.txt" ;

Estoy buscando algo que pueda agregar al final de este comando que cambiará los nombres de archivo a fred.txt , etc. y luego mueva el archivo al directorio principal para eliminar la capa adicional de directorios.

¿Cuál sería la mejor manera de hacer esto?

Respuesta aceptada:

Podemos usar el enfoque clásico:find con while read combinación:

Demostración:

$ ls *
fred:
results.txt

jane:
results.txt

john:
results.txt

$> find . -type f -name "results.txt" -printf "/%Pn" | while read FILE ; do DIR=$(dirname "$FILE" );                            
>  mv ."$FILE" ."$DIR""$DIR".txt;done                                                                                             
$> ls
fred/  jane/  john/
$> ls *
fred:
fred.txt

jane:
jane.txt

john:
john.txt

Usar echo antes de usar mv para probar la línea con sus archivos.

Mejora menor

Podemos incrustar la llamada a bash en exec , con expansión de parámetros (específicamente eliminación de prefijos). Básicamente, está incrustando un script en la llamada ejecutiva.

$> find "$PWD" -type f -name "results.txt" -exec bash -c ' DIR=$( dirname "{}"  ); echo "{}" "$DIR"/"${DIR##*/}".txt  ' ;                
/home/xieerqi/TESTDIR/fred/results.txt /home/xieerqi/TESTDIR/fred/fred.txt
/home/xieerqi/TESTDIR/jane/results.txt /home/xieerqi/TESTDIR/jane/jane.txt
/home/xieerqi/TESTDIR/john/results.txt /home/xieerqi/TESTDIR/john/john.txt

Para hacer que el comando sea general (funciona para cualquier archivo, no solo results.txt) ) simplemente elimine -name "results.txt" parte. También vea esta publicación para una solución Python alternativa a esto.


Ubuntu
  1. ¿Está Mv Atomic en el Fs?

  2. ¿Renombrar en masa el archivo Bash con el contador?

  3. ¿Guardar toda la salida del terminal en un archivo?

  4. ¿Escribir en un archivo .txt?

  5. No se puede cambiar el nombre de un archivo cuyo nombre comienza con un guión

Cambiar el nombre de un archivo en la terminal de Linux

Cómo instalar Ranger Terminal File Manager en Linux

Cómo crear un archivo en Linux usando Terminal

Cómo cambiar el nombre de los archivos en Ubuntu 20.04

Localizadores de terminales

encontrar archivos que tengan un número en el nombre de archivo mayor que