Я пытаюсь переместить последний измененный файл в «Pictures /». Вот что я попробовал:

find Pictures/ -maxdepth 1 -type f -mmin -60 -print0|tail -1| xargs -0 -I {} mv "{}" Dropbox/somefolder/

Это не работает, и это не идеальное решение, так как я предполагаю, что файл был изменен за последний час.

Я получаю эту ошибку:

mv: cannot stat 'Pictures/file.jpg' : No such file or directory

Спасибо!

2 ответа2

0

Это должно быть сделано до тех пор, пока вам никогда не понадобится найти скрытые файлы.

cd /path/to/Pictures
mv "`ls -ltr | grep -v ^d | tail -1 | tr -s ' ' | cut  -d ' ' -f9-`" /path/to/dropbox
0

Если вы используете -print0 , tail не будет работать, потому что ваши выходные данные не содержат переводы строк (если не указаны пути к файлам, по какой-то маловероятной причине).

Предполагая, что файлы не содержат символ новой строки в своем пути, используя GNU find , sort и xargs:

find ~/Pictures -type f -printf '%T@ %P\n' | \
sort -k 1nr | sed 's/^[^ ]* //' | head -n 1 |  xargs -I {} mv "{}" ~/Dropbox

Если у вас есть Zsh, это довольно просто - опять же, переводы строк не допускаются:

mv -- "$(print -l **/*(.om) | head -n 1)" ~/Dropbox

Здесь **/* является рекурсивным глобом, а внутри скобок указаны квалификаторы:

  • . - обычный файл
  • o - сортировать файлы
  • m - по времени модификации

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .