Ho a che fare con un gran numero di file annidati all'interno di directory (un file per directory), simile a questo:
fred/result.txt
john/result.txt
mary/result.txt
...
Attualmente sto usando il seguente comando per elaborare ciascuno di questi file:
find . -maxdepth 1 -type d ( ! -name . ) -exec bash -c "cd '{}' && processResult result.txt" ;
 Sto cercando qualcosa che posso aggiungere alla fine di questo comando che cambierà i nomi dei file in fred.txt , ecc. e successivamente sposta il file nella directory principale per eliminare il livello aggiuntivo di directory.
Quale sarebbe il modo migliore per farlo?
Risposta accettata:
 Possiamo usare l'approccio classico:find con while read combinato:
Demo:
$ 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
 Usa echo prima di usare mv per testare la linea con i tuoi file.
Piccolo miglioramento
 Possiamo incorporare la chiamata a bash in exec , con espansione dei parametri (in particolare rimozione del prefisso). Fondamentalmente sta incorporando uno script in una chiamata exec.
$> 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
 Per rendere il comando generale, (funziona per qualsiasi file, non solo per results.txt ) rimuovi semplicemente -name "results.txt" parte. Vedi anche questo post per una soluzione Python alternativa a questo.