Domanda

Ho un elenco come questo:

dir
dir/somefile.txt
dir/subdir/subsub/somefile2.txt
dir/subdir2/somefile.txt

e voglio aprire tutti i file in tutte le sottodirectory in una singola istanza di un comando. Stavo provando a trovare con -exec, o xargs, ma questi aprire ogni file con un'istanza separata di un comando.

In sostanza, voglio qualcosa che finisce come kate dir/somefile.txt dir/subdir/subsub/somefile2.txt dir/subdir2/somefile.txt, ma per qualsiasi numero di file in qualsiasi numero di sottodirectory. Sto usando bash, ma qualche suggerimento di script vanno bene.

precisazione: non ho intendo solo file .txt, ma qualsiasi file ASCII (. Es .php, .txt, .html, ecc ..)

È stato utile?

Soluzione

Prova

kate `find . -name \*.txt -type f`

dove il -type f vi impedisce di colpire le directory.

Ecco un esempio utilizzando ls -1 invece di kate:

edd@ron:~/src/debian/R$ ls -1 `find . -type f -name \*.txt`
./R-2.10.0/src/extra/graphapp/readme.txt
./R-2.10.0/src/extra/xdr/copyrght.txt
./R-2.10.0/src/extra/xdr/README.txt
./R-2.10.0/src/gnuwin32/fixed/etc/rgb.txt
./R-2.10.0/src/gnuwin32/installer/CustomMsg.txt
./R-2.10.0/src/library/grid/inst/doc/changes.txt
./R-2.10.0/src/unix/system.txt
./R-2.9.2-ra-1.2.8/src/extra/graphapp/readme.txt
./R-2.9.2-ra-1.2.8/src/extra/xdr/copyrght.txt
./R-2.9.2-ra-1.2.8/src/extra/xdr/README.txt
./R-2.9.2-ra-1.2.8/src/gnuwin32/fixed/etc/rgb.txt
./R-2.9.2-ra-1.2.8/src/gnuwin32/installer/CustomMsg.txt
./R-2.9.2-ra-1.2.8/src/library/grid/inst/doc/changes.txt
./R-2.9.2-ra-1.2.8/src/unix/system.txt
edd@ron:~/src/debian/R$

e se si vuole veramente di tutti i file nelle sottodirectory chiamata semplifica a

kate `find . -type f`

se siete in dir/ oppure

kate `find dir -type f`

Altri suggerimenti

Ci sono diverse opzioni possibili per questo. Queste risposte si basano dello scenario in cui si conosce tutti i file possono essere aperti da Kate, e si desidera aprire i file con qualsiasi estensione.

find dir -type f -exec kate {} +  

kate $(find dir -type f)

kate `find dir -type f`

Il secondo e terzo forme sono quasi equivalenti. La differenza principale [1] è che la prima versione in grado di gestire i file con spazi nel loro nome, mentre il secondo e il terzo no.

[1] Grazie per la precisazione NVRAM, non mi rendevo conto quando ho postato la risposta.

kate $(find dir -type f)

Sei o non molto familiare con xargs, o non lo si utilizza in modo corretto, perché quello che si sta cercando di fare è di esattamente il problema xargs è stato progettato per risolvere: Dato un arbitrariamente lunga lista di stringhe, passarli come argomenti ad un programma nel minor numero di esecuzioni possibili, mentre non superiore ai limiti di sistema sul numero di argomenti di un programma può prendere.

Hai ragione per find ... -exec, ma che può anche essere fissato. Basta aggiungere + alla fine del comando find e voilà, si comporta come xargs.

Nessuna delle soluzioni di cui sopra che kate $(...) uso (o l'equivalente con apici inversi) lavoro in generale (che non supportano i nomi di file con spazi, non saranno eseguiti affatto se l'elenco dei file è molto lunga). Sia find ... + e xargs aggirare queste limitazioni.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top