Как перенаправить stdout и stdin на telnet? [закрыто]

Использование последних версий GNU date , find , tar и xargs :

Этот сценарий требует bash или ksh или zsh или другая достаточно современная оболочка, которая понимает подстановку процесса ( )

#!/bin/bash

    today='12am today'
yesterday='12am yesterday'

# function to create a tar file for a directory but only include
# files older than "$2" but newer than "$3".  Delete any files
# added to the tar archive.
#
# the tar file will be created uncompressed in the same directory
# as the directory itself.  e.g. ./dir --> ./dir.tar
function tarit() {
  dir="$1"
  older="$2"
  newer="$3"

  tar cvf "$dir.tar" -C "$dir/.." --null --remove-files \
    -T <(find "$dir" ! -newermt "$older" -newermt "$newer" -type f -print0)
}

# we need to export the function so we can
# run it in a bash subshell from xargs
export -f tarit

# we want to find newer files but output only the path(s)
# containing them with NULs as path separator rather than
# newlines, so use `-printf '%h\0'`.
find . ! -newermt "$today" -newermt "$yesterday" -type f -printf '%h\0' |
  sort -u -z |    # unique sort the directory list
  xargs -0r -I {} bash -c "tarit \"{}\" \"$today\" \"$yesterday\""

ЗАМЕТЬТЕ, как все переменные цитируются в целях безопасности (даже в bash вложенная оболочка, используя экранированные кавычки), а также использование NUL в качестве разделителя (чтобы сценарий не сломался, если имена пути и / или имена файлов содержат раздражающие, но полностью допустимые символы, такие как пробелы или символы новой строки). Также обратите внимание на использование отступов и дополнительных пробелов для улучшения читаемости. И комментарии, объясняющие, что делается и почему.

Если вы просто хотите заархивировать весь каталог и удалить сам каталог (и все файлы в нем), это проще:

#!/bin/bash

    today='12am today'
yesterday='12am yesterday'    

find . ! -newermt "$today" -newermt "$yesterday" -type f -printf '%h\0' |
  sort -u -z |
  xargs -0r -I {} tar cfv "{}.tar" "{}" -C "{}/.." --remove-files

Лично я считаю, что использовать оба этих сценария невероятно опасно. Если вы не осторожны (например, запускаете их как root с / вместо . в качестве пути поиска ... или просто запускаете их в каталоге / ] ), вы можете удалять файлы и даже целые каталоги, необходимые для операционной системы. Даже запуск их под вашим uid в вашем домашнем каталоге (или в любом другом месте, где у вас есть доступ для записи - в любом случае вам нужно будет создать tar-файлы), можно удалить файлы, которые вы хотите сохранить.

ИМО, вам действительно нужно переосмыслить, действительно ли вам нужно использовать параметр - remove-files в tar .Чего вы пытаетесь достичь? Это что, жнец какой-то? Если это так, то просто слепое удаление файлов в / tmp может нарушить длительные процессы, которые, например, вчера создали файл (ы) в / tmp и должны повторно использовать их сегодня ... или завтра.

Короче: Вот пара заряженных ружей. Постарайтесь не выстрелить ими себе в ногу.

3
13.10.2014, 06:54
0 ответов

Теги

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