Как переместить найденные файлы в другой каталог?

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

Скрипт:

#!/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 , похоже, не работает. Я получаю сообщение об ошибке: отсутствует файл операнда.

Какие-либо решения?

3
задан 19 June 2020 в 13:12

1 ответ

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

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

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

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

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

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

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

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

Отказ от ответственности: Я не проверял остальную часть вашего скрипта.

3
ответ дан 19 June 2020 в 21:23

Другие вопросы по тегам:

Похожие вопросы: