나는 지난 24시간 동안 수정된 디렉토리를 검색한 다음 tar를 사용하여 압축하는 쉘 스크립트를 작성하고 있습니다.
폴더 검색:
find /path to log directory/ -maxdepth 1 -type d -mtime +0
예제 출력:
/path to log directory/01_05_2016
/path to log directory/02_05_2016
/path to log directory/03_05_2016
/path to log directory/04_05_2016
불필요한 문자를 자릅니다.
find /path to log directory/ -maxdepth 1 -type d -mtime +0 | tr -d "_" | tr -d "path to log directory"
예제 출력:
01052016 02052016 03052016 04052016
잘린 문자열을 별도의 배열 요소로 분리하려면 "sed"를 사용하십시오.
# Folder search
declare -a array="($(find <0-24 hour directory serach> | <truncate uncecessary character> | sed 's/\([0-9]*\).*/[\1]="\1"/'))"
# Array Printing
echo "Number of Array Elements: "${#array[@]}
echo "array[01052016]: " ${array[01052016]}
echo "array[02052016]: " ${array[02052016]}
echo "array[03052016]: " ${array[03052016]}
echo "array[04052016]: " ${array[04052016]}
예제 출력
Number of Array Elements: 4
array[01052016]: 01052016
array[02052016]: 02052016
array[03052016]: 03052016
array[04052016]: 04052016
압축 출력:
LOG_DIR_NAME='<find folder>'
xargs tar -cvzPf /ouput folder/logname.tar.gz /path to log directory $LOG_DIR_NAME
문제 설명:
sed 명령을 사용하면 검색 문자열을 별도의 배열 요소로 분할할 수 있습니다. 이 명령을 사용하세요
sed 's/\([0-9]*\).*/[\1]="\1"/'
여기서 [\1]은 내 배열 인덱스를 정의하고 "\1"은 내 요소를 정의합니다.
원하는 출력 인덱스(0~n)에 저장된 배열 요소를 가져오는 데 관심이 있습니다.
array[0]: 01052016
array[1]: 02052016
array[2]: 03052016
array[3]: 04052016
이 경우 시작 인덱스를 모르고 배열 인덱스를 사용자 정의하거나 배열을 반복하려면 어떻게 해야 합니까?
도와주세요
감사해요
답변1
먼저 명령을 다음과 같이 단순화해야 합니다.
$ find "/path to log directory/" -maxdepth 1 -type d -mtime +0 | sed 's#.*/##; s#_##g'
01052016
03052016
04052016
02052016
다음으로 배열로 저장하려면 다음을 수행합니다.
array=( $(find "/path to log directory/" -maxdepth 1 -type d -mtime +0 | sed 's#.*/##; s#_##g') )
필요에 따라 숫자가 있는 배열에 저장할 수 있으며, 0부터 시작하여 증가하는 색인이 지정됩니다.
$ for i in {0..3}; do echo "$i : ${array[$i]}"; done
0 : 01052016
1 : 03052016
2 : 04052016
3 : 02052016
즉, 연관 배열을 반복해야 하는 경우 다음과 같이 수행할 수도 있습니다.
$ declare -a array=( "foo"=>"bar" "baz"=>"bad" )
$ for i in ${!array[*]}; do echo "$i : ${array[$i]}"; done
baz : bad
foo : bar