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.

  • Ctrl-C negli script bash
  • Come impedire la schermata GNU di espandere le tabs negli spazi?
  • Disabilita la possibilità di hide la cronologia dei comandi bash
  • Hash per creare codici colore Hex dalla string (in bash)
  • FreeBSD: Come conoscere la dimensione del file reale su zfs con la compressione?
  • Eseguire lo script Bash su Ubuntu dalla macchina remota di Windows?
  • Ne risulta invece solo ./index_disabled .

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

    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.