Perché ** non trova ** trova qualcosa?


17

Sto cercando i file script di shell installate sul mio sistema, ma trovare non funziona:

$ find /usr -name *.sh 

ma so che ci sono un sacco di script là fuori. Per esempio:

$ ls /usr/local/lib/*.sh 
/usr/local/lib/tclConfig.sh 
/usr/local/lib/tkConfig.sh 

Perché non trovare lavoro?

+2

È a questa domanda un SuperUser ? 08 nov. 092009-11-08 01:44:11

  0

Questo si adatta meglio su [UnixSE] (http://unix.stackexchange.com/) 17 dic. 152015-12-17 10:17:21

51

Prova citando il jolly:

$ find /usr -name \*.sh 

o:

$ find /usr -name '*.sh' 

Se vi capita di avere un file che corrisponde * .sh nella directory di lavoro corrente, il carattere jolly sarà ampliato prima che trovi lo veda. Se vi capita di avere un file chiamato tkConfig.sh nella directory di lavoro, il trovare comando si espanderebbe a:

$ find /usr -name tkConfig.sh 

che sarebbe solo trovare i file di nome tkConfig.sh. Se tu avessi più di un file che corrisponde * .sh, si otterrebbe un errore di sintassi da trovare:

$ cd /usr/local/lib 
$ find /usr -name *.sh 
find: bad option tkConfig.sh 
find: path-list predicate-list 

Anche in questo caso, il motivo è che il carattere jolly si espande per entrambi i file:

$ find /usr -name tclConfig.sh tkConfig.sh 

Il richiamo del jolly impedisce l'espansione prematura.

Un'altra possibilità è che/usr o una delle sue sottodirectory sia un collegamento simbolico. trovare normalmente non seguire i link, quindi potrebbe essere necessario il -follow opzione:

$ find /usr -follow -name '*.sh' 
  0

Cosa succede se il file è uno script di shell ma manca l'estensione '.sh'? Forse qualcosa come 'find/xyz | file xargs | guscio di grep'? 14 dic. 152015-12-14 17:52:12

  0

Con quale frequenza, tuttavia, gli script di shell ** not ** hanno un'estensione .sh? 16 dic. 152015-12-16 19:43:46

  0

Esiste un modo generale per capire quando/dove viene espanso un carattere jolly? 21 dic. 152015-12-21 09:51:50

  0

Beh, crescendo in Windows dove * tutto * ha un'estensione ho visto parecchi script su * ix omettendo che '.sh' 21 dic. 152015-12-21 19:29:00


15

Su alcuni sistemi (Solaris, per esempio), non c'è alcuna azione di default, quindi è necessario aggiungere il - comando di stampa.

find /usr -name '*.foo' -print 
+1

Sono stato un po 'vicino a quello in passato. Ma dovrei sottolineare che in una moderna scatola di Solaris, -print è attivo per impostazione predefinita. In effetti, non riesco a trovare una scoperta che non funzioni più in questo modo. 08 set. 082008-09-08 22:49:33


7

Per la ricerca di file sui dischi, magra da usare "individuare", invece, che è istantanea (guarda in un indice giornaliero integrato) si esempio potrebbe essere:

locate '/usr*.sh' 
  0

Un bel suggerimento. (Ho dovuto eseguire updatedb sulla mia macchina per testare l'idea, dal momento che non ce l'ho nel mio crontab per qualche motivo.Non avere un database aggiornato sarebbe la ragione principale per non usare locate.) 27 gen. 092009-01-27 18:39:51

  0

E ci sono alcuni sistemi che non hanno localizzazione installata di default - ho scoperto che dovevo installare il pacchetto 'mlocate' sul mio Raspberry Pi - senza dimenticare il' sudo updatedb' in seguito per costruire gli indici ... 24 dic. 152015-12-24 22:33:51