Команда Unix для сжатия файлов и перемещения их в домашний каталог

Приведенные ниже команды Unix используются для получения списка файлов, измененных за последние 30 минут, которые отлично работают.

touch -t 02231249.00 /tmp/last30min
find /mydirectory -type f -newer /tmp/last30min
rm /tmp/last30min

Может кто-нибудь, пожалуйста, предоставьте мне команды, чтобы сжать эти файлы и переместить их в домашний каталог или каталог tmp.

Спасибо за вашу помощь!!!.


person user2102048    schedule 23.02.2013    source источник


Ответы (2)


Передайте аргументы вашей команды find, разделенные нулевыми символами (важно, если ваши имена файлов содержат пробелы), в xargs для выполнения задания.

find /mydirectory -type f -newer /tmp/last30min -print0 | xargs -0 -I{} sh -c 'gzip "{}"; mv "{}".gz ~'

где -I{} указывает xargs заменить все {} в команде строкой ввода, то есть текущим файлом, найденным find.

Если вы используете оболочку Z (zsh), это намного проще, все можно сделать в одну строку:

for i (/mydirectory/**/*(mm-30)) { gzip $i && mv $i.gz ~ }

Здесь ** выполняет рекурсивный поиск, а (mm-30) означает, что mизменено за последние (-) 30 mсекунд.

person mpy    schedule 23.02.2013

Ваша сенсорная команда работает неправильно, я проверил метки времени, и они в моем часовом поясе соответствуют следующей дате:

$ touch -t 02231249.00 /tmp/last30min
$ perl -e'print scalar localtime((stat("/tmp/last30min"))[9])'
Sat Feb 23 12:49:00 2013jamie@jamie-Ideapad-Z570:~/temp$ 

Я думаю, что эта команда сделает то, что вы просите

for f in `find . -mmin -30 -print`;do echo $f;gzip -c $f > $HOME/$f.gz;done
person Vorsprung    schedule 23.02.2013