GNU/Linux >> Linux Esercitazione >  >> Linux

utilizzo dei caratteri jolly di Linux in cp e mv

Il find Il comando può essere utilizzato in modo abbastanza conciso in casi semplici in cui si desidera eseguire operazioni su corrispondenze di nomi di file con caratteri jolly (o più complessi). La tecnica qui sotto può essere affidata alla memoria... quasi!

Funziona lasciando che find comando esegue un altro comando su ogni nome file che trova. Puoi provare questo esempio usando echo invece di/davanti a mv .

Se volessimo spostare tutti i file nella directory corrente il cui nome inizia con "report", in un'altra directory parallela chiamata "reports":

find . -name "report*.*" -exec mv '{}' ../reports/ \;

La stringa jolly deve essere tra virgolette, il {} che indica il nome del file che è stato "trovato" deve essere tra virgolette e il punto e virgola finale deve essere preceduto da escape, tutto a causa del trattamento Bash/shell di quei caratteri.

Guarda la pagina man di find per ulteriori usi:https://linux.die.net/man/1/find


Parliamo per un minuto di come funzionano i caratteri jolly.

cp *.txt foo

in realtà non invoca cp con un argomento *.txt , se esistono file corrispondenti a quel glob. Invece, esegue qualcosa del genere:

cp a.txt b.txt c.txt foo

Allo stesso modo, qualcosa come

mv *.txt *.old

...non può assolutamente sapere cosa fare, perché quando viene invocato, ciò che vede è:

mv a.txt b.txt c.txt *.old

o, peggio, se già hai un file chiamato z.old , vedrà:

mv a.txt b.txt c.txt z.old

Pertanto, è necessario utilizzare diversi strumenti. Considera:

# REPLACES: mv /data/*/Sample_*/logs/*_Data_time.err /data/*/Sample_*/logs/*_Data_time_orig.err
for f in /data/*/Sample_*/logs/*_Data_time.err; do
  mv "$f" "${f%_Data_time.err}_Data_time_orig.err"
done

# REPLACES: cp /data/*/Sample_*/scripts/*.sh /data/*/Sample_*/scripts/*_orig.sh
for f in /data/*/Sample_*/scripts/*.sh; do
  cp "$f" "${f%.sh}_orig.sh"
done

# REPLACES: sh /data/*/Sample_*/scripts/*_orig.sh
for f in /data/*/Sample_*/scripts/*_orig.sh; do
  if [[ -e "$f" ]]; then
    # honor the script's shebang and let it choose an interpreter to use
    "$f"
  else
    # script is not executable, assume POSIX sh (not bash, ksh, etc)
    sh "$f"
  fi
done

Questo utilizza un'espansione dei parametri per rimuovere la parte finale del vecchio nome prima di aggiungere il nuovo nome.


Linux
  1. 4 Utilizzo essenziale e pratico del comando Cut in Linux

  2. Comando Linux df

  3. Che cos'è Anacron e utilizzo di Anacron in Linux

  4. dd Esempi di comandi in Linux

  5. Utilizzo della CPU Linux e cronologia di esecuzione dei processi

Comando principale di Linux

Come visualizzare l'utilizzo del disco con Duf su Linux e Unix

comando rm in Linux

Comando Mv in Linux

7 Utilizzo essenziale e pratico del comando Incolla in Linux

Ubuntu Linux:elabora la memoria di scambio e l'utilizzo della memoria