Я использовал здесь несколько записей, чтобы провести меня по следующему сценарию bash: LOG_FILES = $ (find ~ / testing.domain.net -name "domain_ * log" -printf '% P') NEW_LOG_FILES = $ (echo $ LOG_FILES | сед -...

0
Jose Correia 27 Дек 2020 в 21:14

1 ответ

Лучший ответ

Я думаю, что было бы безопаснее использовать каталог перед созданием tar-архива, чтобы избежать "tarbomb".

Я имею в виду что-то вроде:

now="$(date +"%m-%d-%Y")"
archiv_dir="archiv_dir-${now}"
mkdir -p "${archiv_dir}"
find ~/testing.domain.net -type f -a -iname "domain_*log" -exec mv {} "${archiv_dir}" \; 
tar cvzf "${now}.tar.gz" "${archiv_dir}" && mv "${now}.tar.gz" "archivedlogs/" && rm -rf "${archiv_dir}"

P.S: убедитесь, что вы используете двойные кавычки, когда используете значение переменной в Bash (или даже используете другие оболочки POSIX), кроме как внутри [[.

ИЗМЕНИТЬ, чтобы ответить на это:

Еще одна вещь @Idriss, некоторые из этих подкаталогов имеют одинаковые имена файлов, когда mv пытается их скопировать, он игнорирует их, потому что они уже есть ... есть ли способ убедиться, что родительский каталог каким-то образом добавлен к имени?

Приложив немного bash и awk, вы можете попробовать что-то вроде:

#!/bin/bash

now="$(date +"%m-%d-%Y")"
archiv_dir="archiv_dir-${now}"

ROOT=~/testing.domain.net
find "${ROOT}" -type f -a -iname "domain_*log"|while read; do 
  subdir="$(echo $REPLY|awk -F '/' '{print $(NF-1)}')"
  filename="$(basename "${REPLY}")"
  [[ $subdir && $subdir != $(basename $ROOT) ]] && filename="${subdir}_${filename}"
  echo mv "${REPLY}" "${archiv_dir}/${filename}"
done

Вот результат:

mv /Users/ineumann/testing.domain.net/subdir3/domain_error_log archiv_dir-12-28-2020/subdir3_domain_error_log
mv /Users/ineumann/testing.domain.net/subdir2/domain_error_log archiv_dir-12-28-2020/subdir2_domain_error_log
mv /Users/ineumann/testing.domain.net/subdir1/domain_error_log archiv_dir-12-28-2020/subdir1_domain_error_log
mv /Users/ineumann/testing.domain.net/domain_info_log archiv_dir-12-28-2020/domain_info_log

Примечание: просто удалите echo перед mv, чтобы выполнить ходы, и я разрешаю вам объединить этот пример с вашим предыдущим скриптом, который создает каталоги, архив tar и т. Д.

0
Idriss Neumann 28 Дек 2020 в 17:22