Come faccio a utilizzare l'operatore {} nell'esecuzione di esecuzione all'interno di exec

Ho provato questo command bash:

find /var/www/ -path '*wp-admin/index.php' -exec mv {} $(dirname {})/index_disabled 

Ma il secondo {} non viene eseguito.

Ne risulta invece solo ./index_disabled .

Come posso utilizzare due volte il parametro trovato nel command di esecuzione?

  • Elenca le directory che non contengono un file
  • Come posso trovare i collegamenti simbolici circolari?
  • Come elencare tutti i file scritti a Linux?
  • Comando trova Mostra "Valore troppo grande per il tipo di dati definito"
  • Linux: escludere tipi di file specifici quando si esegue "individuare"
  • come scoprire gli indirizzi MAC di tutte le macchine sulla networking
  • Come faccio a (non-gnu-) grep ignorare i file binari?
  • FreeBSD: Come conoscere la dimensione del file reale su zfs con la compressione?
  • 3 Solutions collect form web for “Come faccio a utilizzare l'operatore {} nell'esecuzione di esecuzione all'interno di exec”

    Potresti usare un semplice ciclo per risolvere questo problema.

     for f in $(find /var/www/ -path '*wp-admin/index.php'); do mv $f $(dirname $f)/index_disabled; done 

    Il tuo problema non è che non sia interpretato due volte, come fare

     find . -type f -exec echo {} {} \; 

    mostrerò. Il problema è che {} non può essere utilizzato come argomento a una function, come stai cercando. Nella mia esperienza (limitata), se vuoi diventare intelligente con la find e il contenuto di {} , devi scrivere uno script di shell che viene invocato da find , che prende {} come suo unico argomento e che fa le cose intelligenti all'interno di questo script.

    Ecco un esempio di script intelligente:

     [me@risby tmp]$ cat /tmp/clever.sh #!/bin/bash echo $1 $(dirname $1)/index_disabled 

    Ecco io che lo uso con la ricerca e le ultime righe dei risultati:

     [me@risby tmp]$ find . -type f -exec /tmp/clever.sh {} \; [...] ./YubiPAM-1.1-beta1/stamp-h1 ./YubiPAM-1.1-beta1/index_disabled ./YubiPAM-1.1-beta1/depcomp ./YubiPAM-1.1-beta1/index_disabled ./YubiPAM-1.1-beta1/INSTALL ./YubiPAM-1.1-beta1/index_disabled 

    Come potete vedere, se ho sostituito l' echo nel shellscript con mv , avrei ottenuto il risultato desiderato.

    Devi usare il command xargs e un piccolo trucco:

     $ find /var/www/ -path '*wp-admin/index.php' | xargs -i sh -c 'mv {} $(dirname {})/index_disabled' 
    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.