GNU/Linux >> Linux Esercitazione >  >> Ubuntu

Spostare solo gli ultimi 8 file di una directory in un'altra directory?

Sto cercando di spostare gli ultimi 8 file da Documents directory in un'altra directory, ma non voglio spostarli uno per uno in quella directory specifica. E' possibile spostarli sostituendo la tail comando, ma per le directory invece dei file? Voglio dire, mi piacerebbe farlo con qualcosa come tail -8 ./Documents | mv ./Anotherdirectory o con mv tail -8 ./Documents ./Anotherdirectory .

In effetti, sto cercando un modo intelligente per spostare gli ultimi 8 file (come elencato in ls ) rapidamente (senza digitare ogni nome) nell'altra directory. Qualche suggerimento?

Risposta accettata:

Puoi usare for , che scorre i file in modo ordinato e ci consente di evitare di analizzare l'output di find o ls , per evitare problemi con spazi e altri caratteri speciali nei nomi dei file. Mille grazie a @muru per aver migliorato questo 🙂

i=0; j=$(stat ~/Documents/* --printf "%in" | wc -l); for k in ~/Documents/*; do if (( (j - ++i) < 8 )); then echo mv -v "$k" ~/AnotherDirectory; fi; done 

Provalo prima con echo , quindi rimuovi echo per spostare effettivamente i file.

Come copione:

#!/bin/bash
i=0
j=$(stat ~/Documents/* --printf "%in" | wc -l )
for k in ~/Documents/*; do
  if (( (j - ++i) < 8 )); then
    echo mv -v -- "$k" ~/AnotherDirectory
  fi
done

di nuovo, rimuovi echo dopo aver provato a spostare i file sul serio

Spiegazione

  • i=0 dicendo alla shell di iniziare l'iterazione a 0
  • j=$(stat ~/Documents/* --printf "%in" | wc -l ) questo sta impostando la variabile j a un numero intero uguale al numero totale di file nella directory. Grazie alla risposta di Serg alla mia domanda su come contare i file in modo affidabile, indipendentemente dai caratteri che contengono i loro nomi
  • do if (( (j - ++i) < 8 )) per ogni iterazione del ciclo, verifica se il risultato di j meno il numero di volte in cui il ciclo è stato eseguito è inferiore a 8 e se lo è allora
  • mv -v -- "$k" ~/AnotherDirectory sposta il file nella nuova directory

Ubuntu
  1. Come spostare tutti i file (inclusi quelli nascosti) da una directory all'altra?

  2. Come personalizzare il completamento automatico di Bash per elencare i file in un'altra directory?

  3. Come spostare la directory dei dati di MySQL?

  4. Come spostare i file da un account utente a un altro sullo stesso computer?

  5. Come spostare tutti i file di origine Java nella rispettiva directory del pacchetto?

Come spostare i file in un'altra cartella utilizzando File Manager

Conta le righe di tutti i file nella directory di Ubuntu

Come spostare (e sovrascrivere) tutti i file da una directory all'altra?

Come copiare i primi 10 file più recenti da una directory all'altra?

Come posso elencare (ls) gli ultimi 5 file modificati in una directory?

Grep in un file di registro enorme (> 14 GB) solo l'ultimo x GB?