2015-07-24 2 views
0

Созданный ниже скрипт, который найдет файлы в двух каталогах с более чем 5 днями, а сжатые файлы будут перенесены в другой каталог. Однако, я была проблема, если нет файлов, которые +5 дней в этих 2-х каталогов, я получил ошибкиBash: Нет такой ошибки в файле/каталоге

find: `/home/folder1/*.*': No such file or directory 
find: `/home/folder2/*.*': No such file or directory 
mv: cannot stat `/home/folder1/*.Z': No such file or directory 
mv: cannot stat `/home/folder2/*.Z': No such file or directory 

Мой скрипт:

#!/bin/bash 

find /home/folder1/*.* /home/folder2/*.* -type -f -mtime +5 -exec compress {} \; 
mv /home/folder1/*.Z /home/folder1/archive 

mv /home/folder2/*.Z /home/folder2/archive 
+0

glob в ваших параметрах поиска распространяется на фактический список имен файлов, вот как появляются ваши ошибки. – HuStmpHrrr

ответ

2

find не нуждается эти глобусы делать то, что вы тоже хотите (если вы не пытаетесь специально игнорировать файлы, которые не имеют . в своих именах). Вы можете просто бросить их.

find /home/folder1 /home/folder2 -type -f -mtime +5 -exec compress {} \; 

Тогда вместо того, чтобы слепо используя mv на сгусток для файла, который может или не может существовать тест для них первым (или молчания ошибки).

# nullglob makes the globs result in empty strings instead of staying the glob when they don't match any files. 
shopt -s nullglob 

f1files=(/home/folder1/*.Z) 
if [ "${#f1files[@]}" -gt 0 ]; then 
    mv "${f1files[@]}" /home/folder1/archive 
fi 

f2files=(/home/folder2/*.Z) 
if [ "${#f1files[@]}" -gt 0 ]; then 
    mv "${f1files[@]}" /home/folder2/archive 
fi 

Это все сказанное ваша команда find это собирается найти .Z архивных файлов вы создаете под /home/folder#/archive и будет повторно сжать их в папке archive. (Если compress не достаточно умен, чтобы не делать ничего в .Z файл, но он все равно будет получать работать на этих файлах.)

Вы почти наверняка сделать не хотите, что так нужно обрабатывать, что либо с помощью каталога архива не в папке, которую вы вызываете find, или исключив их из команды find.

Смежные вопросы