file mv con | xargs


18

Sto solo cercando di spostare un mucchio di file (non collegamenti simbolici) dalla mia cartella / etc / apache / sites-enabled nella cartella / etc / apache / sites-available con il seguente:

/etc/apache2/sites-enabled$ find . -maxdepth 1 -type f | xargs mv {} ../sites-available/

ma sono un ubuntu n00b e ricevo questo errore:

mv: target `./real-file' is not a directory

dove "real-file" è un file di test che ho impostato nel mio ambiente di sviluppo. Sto cercando di riordinare il casino di qualcun altro su un server di produzione ;-)

Risposte:


27

Puoi provare l' -execopzione con il findcomando,

/etc/apache2/sites-enabled$ sudo find . -maxdepth 1 -type f -exec mv {} /etc/apache2/sites-available \;

Per lo spostamento di file di proprietà di root, sono necessarie sudoautorizzazioni.

Se si desidera utilizzare il xargscomando, aggiungere -Iun'opzione ad esso.

find . -maxdepth 1 -type f | sudo xargs -I {} mv {} /etc/apache2/sites-available/

7

Idealmente dovresti usare -print0 con find, quindi i nomi di file con spazi non rovinano le cose.

Ad esempio, questo dovrebbe funzionare:

find . -whatever-flags-go-here -print0 | xargs -r0 mv -t target-directory

0

puoi anche usare un altro modo per eseguire lo stesso ma con prestazioni extra :

find . -maxdepth 1 -type f -exec mv {} /etc/apache2/sites-available \+

Si noti che termina con \+quale mezzo per il comando find ottenere l'output ed espandersi nel {}fare ciò che si desidera, in questo modo si evitano le due opzioni ( \;= per ogni voce E il piping in un nuovo comando xargs)

Ecco la spiegazione (puoi anche consultare il manuale man find)

-exec command {} + Questa variante dell'azione -exec esegue il comando specificato sui file selezionati, ma la riga di comando viene creata aggiungendo alla fine ciascun nome di file selezionato; il numero totale di invocazioni del comando sarà molto inferiore al numero di file corrispondenti. La riga di comando è costruita nello stesso modo in cui xargs costruisce le sue righe di comando. Nel comando è consentita solo un'istanza di '{}'. Il comando viene eseguito nella directory iniziale.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.