GNU/Linux >> Znalost Linux >  >> Ubuntu

Přesunout pouze posledních 8 souborů v adresáři do jiného adresáře?

Snažím se přesunout posledních 8 souborů z Documents adresář do jiného adresáře, ale nechci je přesouvat po jednom do tohoto konkrétního adresáře. Je možné je přesunout náhradou za tail příkaz, ale pro adresáře místo souborů? Chci říct, že bych to chtěl udělat s něčím jako tail -8 ./Documents | mv ./Anotherdirectory nebo s mv tail -8 ./Documents ./Anotherdirectory .

Ve skutečnosti hledám chytrý způsob, jak bych mohl přesunout posledních 8 souborů (jak je uvedeno v ls ) rychle (bez vypisování jednotlivých jmen) do jiného adresáře. Nějaké návrhy?

Přijatá odpověď:

Můžete použít for , který prochází soubory uspořádaným způsobem a umožňuje nám vyhnout se analýze výstupu find nebo ls , abyste se vyhnuli problémům s mezerami a jinými speciálními znaky v názvech souborů. Mnohokrát děkuji @muru za zlepšení 🙂

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 

Nejprve to vyzkoušejte pomocí echo a poté odeberte echo skutečně přesunout soubory.

Jako skript:

#!/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

znovu odstraňte echo po testování přesunout soubory do skutečného stavu

Vysvětlení

  • i=0 říct shellu, aby začal iterovat na 0
  • j=$(stat ~/Documents/* --printf "%in" | wc -l ) toto je nastavení proměnné j na celé číslo rovné celkovému počtu souborů v adresáři. Díky Sergově odpovědi na mou vlastní otázku, jak spolehlivě počítat soubory bez ohledu na to, jaké znaky obsahují jejich názvy
  • do if (( (j - ++i) < 8 )) pro každou iteraci cyklu otestujte, zda je výsledek j mínus počet spuštění smyčky je menší než 8 a pokud ano, pak
  • mv -v -- "$k" ~/AnotherDirectory přesuňte soubor do nového adresáře

Ubuntu
  1. Jak přizpůsobit automatické doplňování Bash tak, aby vypisovalo soubory v jiném adresáři?

  2. Jak přesunout soubory z jednoho uživatelského účtu do druhého na stejném počítači?

  3. Jak přesunout všechny zdrojové soubory Java do jejich příslušného adresáře balíčku?

  1. Uloženo ve složce „/var/lib/dpkg/updates“?

  2. Tajemné .adresáře v domovském adresáři?

  3. Spočítejte řádky všech souborů v adresáři Ubuntu

  1. Počítání počtu souborů v adresáři pomocí C

  2. Jak přesunout (a přepsat) všechny soubory z jednoho adresáře do druhého?

  3. Jak zkopírovat 10 posledních souborů z jednoho adresáře do druhého?