Я проигнорирую очевидные синтаксические ошибки в вашем коде и предположу, что вы хотите сохранить десять последних измененных файлов в каталоге ~/work
. Я также предполагаю, что у вас есть оболочка zsh
.
Следующий сценарий оболочки zsh
перемещает все файлы, кроме десяти последних измененных, из ~/work
в ~/regular_archieve
.
#!/bin/zsh
mv -i $HOME/work/*(.om[11,-1]) $HOME/regular_archieve
Единственная команда в сценарии оставляет десять последних измененных файлов в ~/work
, а остальные перемещает в ~/regular_archieve
. Это делается с помощью mv
и специального шаблона zsh
-. Шаблон *(.om[11,-1])
будет расширяться до обычных файлов, которые необходимо переместить (никакие каталоги не будут соответствовать ). Это om
, который сортирует файлы по метке времени модификации, и [11,-1]
, который выбирает имя файла с 11 до самого старого файла в этом отсортированном списке. Точка в начале квалификатора glob.om[11,-1]
означает, что glob соответствует только обычным файлам.
Если у вас может быть много тысяч файлов в каталоге, это может привести к ошибке «Слишком длинный список аргументов». В этом случае перемещайте файлы по отдельности, используя цикл :
.#!/bin/zsh
for pathname in $HOME/work/*(.om[11,-1]); do
mv -i $pathname $HOME/regular_archieve
done
Правильная команда будет locate '*'
или locate "*"
или locate \*
.
*
необходимо заключить в кавычки, чтобы оболочка не расширила его до имен, присутствующих в текущем рабочем каталоге.