Questo dovrebbe essere relativamente banale ma ho cercato per qualche tempo senza molta fortuna. Ho una directory, con molte directory in, ognuna con la propria struttura e file.Trova file, rinomina in posto unix bash
Sto cercando di trovare tutti i file .java all'interno di qualsiasi directory nella directory di lavoro e li rinominare con un nome particolare. Ad esempio, vorrei nominare tutti i file java "test.java".
Se la struttura di directory è:
./files/abc/src/abc.java
./files/eee/src/foo.java
./files/roo/src/jam.java
voglio cambiare titolo semplicemente:
./files/abc/src/test.java
./files/eee/src/test.java
./files/roo/src/test.java
Naturalmente, parte del mio problema è che i percorsi possono avere spazi nei I don. Non c'è bisogno di preoccuparsi di ridenominare le classi o qualsiasi cosa all'interno del file, solo il nome del file sul posto.
Se c'è più di 1 file .java in una directory, non mi importa se viene sovrascritto o viene richiesto di scegliere cosa fare (o va bene, è improbabile che ce ne siano più di 1 in ogni directory
Quello che ho cercato:.
Guardando in mv e trovare, ma quando il tubo insieme mi sembra di essere facendo male, voglio fare in modo di mantenere nella loro posizione attuale e rinominare e non spostare
Grazie, ho davvero apprezzato qualsiasi aiuto
Come si legge il bit "$ {1%/*}"/test.java'? – dumbledad
La variabile '$ 1','% 'rimuove il suffisso di corrispondenza più breve'/* '- rimuove il nome del file da $ 1' come' dirname "$ 1" 'farebbe. '/ test.java' viene aggiunto al nome di quella directory. –