Вы можете делать такие вещи, используя команду substitution. В Bash:
mv $(ls -d [sort options] source/* | tail -n8) destination
$(command) будет запускать все, что заключено в нем, и подставлять вывод текста во внешнюю команду. Эта команда ls будет печатать путь к каждому файлу в исходном каталоге, отсортированном по указанным вами флагам, по одному на строку, поэтому tail может просто взять последние несколько. Таким образом, вышеупомянутое расширилось бы до
mv source/file1 source/file2 source/file3 ... source/file8 destination
Вы можете просто запустить ls -d [sort options] source/* | tail -n8, чтобы посмотреть, какие файлы он будет копировать.
В зависимости от того, как вы заказываете вывод ls и имя файла, вы можете сделать то, что ищете более просто, просто используя какой-либо вариант mv source/name_* destination, чтобы скопировать все, начиная с «name_» в целевой каталог.
EDIT: Вышеупомянутые разрывы, когда в именах файлов есть пробелы. Более сложной альтернативой, которая обращается к этому, будет
ls -d1 [sort options] source/* | tail -n8 | tr '\n' '\0' | xargs --null mv -t destination
, хотя он все еще использует вывод синтаксического анализа ls для сортировки в любом порядке, который не является алфавитным.
Создайте сценарий оболочки с этим контентом:
#!/bin/sh
dpkg -l linux-* | \
awk '/^ii/{ print $2}' | \
grep -v -e `uname -r | cut -f1,2 -d"-"` | \
grep -e '[0-9]' | xargs sudo apt-get -y purge
Этот скрипт удалит старые ядра, заголовки и источники.