Как переместить найденные файлы в другую директорию r? - proUbuntu
5 голосов
/ 19 июня 2020

Привет всем. У меня есть следующий сценарий, который отлично работает, за исключением аргумента mv. Сценарий в основном выполняет поиск r файлов, которые были созданы в указанное c время, и мне нужно переместить все найденные файлы в другой каталог r с именем timefile

Script :

#!/bin/bash
read -rp 'hour ([0]0-23): ' hour
case $hour in
  (0|00)
    find /home/mikepnrs -newermt "yesterday 23:59" \
      ! -newermt 0:59 ;;
  (0[1-9]|1[0-9]|2[0-3])
    find /home/mikepnrs -newermt "$((10#$hour-1)):59" \
      ! -newermt "$hour:59" | mv -t /home/mikepnrs/timefile ;;
  (*)
    printf 'invalid hour: %s\n' "$hour"
esac

Синтаксис mv -t /home/mikepnrs/timefile кажется не работает. Ошибка r, которую я получаю, это mv отсутствует файловый операнд.

Какие-нибудь решения?

1 Ответ

5 голосов
/ 19 июня 2020

You r pipe (find ... | mv ...) означает отправку STDOUT из find в STDIN из mv. Но mv не принимает файлы из STDIN, только аргументы.

Вы можете преобразовать STDIN в аргументы, используя xargs:

find ... -print0 | xargs -0 mv -t target

(-print0 и xargs -0 для вывода по конвейеру с нулевым разделителем вместо разделителя новой строки, потому что новая строка является допустимым символом r как часть имен файлов).

Но предпочтительный вариант - просто использовать find -exec:

find ... -exec mv -t target {} +

В вашем r случае:

find /home/mikepnrs -newermt "$((10#$hour-1)):59" \
  ! -newermt "$hour:59" -exec mv -t /home/mikepnrs/timefile {} +

Заявление об ограничении ответственности r: я не проверял остальных из вас r скрипт.

...