이것은 내 파일이며 출력은 다음과 같습니다.ll | awk '{print $9}'
thread_dump_10-10-22_10:00:01*
thread_dump_10-10-22_10:05:01*
thread_dump_10-10-22_10:10:01*
thread_dump_10-10-22_10:15:01*
thread_dump_10-10-22_10:20:01*
thread_dump_10-10-22_10:25:01*
thread_dump_10-10-22_10:30:01*
thread_dump_10-10-22_10:35:01*
thread_dump_10-10-22_10:40:01*
thread_dump_10-10-22_10:45:01*
thread_dump_10-10-22_10:50:01*
thread_dump_10-10-22_10:55:01*
thread_dump_10-10-22_11:00:01*
thread_dump_10-10-22_11:05:01*
thread_dump_10-10-22_11:10:01*
thread_dump_10-10-22_11:15:01*
thread_dump_10-10-22_11:20:01*
thread_dump_10-10-22_11:25:01*
thread_dump_10-10-22_11:30:01*
thread_dump_10-10-22_11:35:01*
thread_dump_10-10-22_11:40:01*
thread_dump_10-10-22_11:45:01*
thread_dump_10-10-22_11:50:01*
thread_dump_10-10-22_11:55:01*
thread_dump_10-10-22_12:00:01*
thread_dump_10-10-22_12:05:01*
thread_dump_10-10-22_12:10:01*
thread_dump_10-10-22_12:15:01*
thread_dump_10-10-22_12:20:01*
thread_dump_10-10-22_12:25:01*
thread_dump_10-10-22_12:30:01*
thread_dump_10-10-22_12:35:01*
thread_dump_10-10-22_12:40:01*
thread_dump_10-10-22_12:45:01*
thread_dump_10-10-22_12:50:01*
thread_dump_10-10-22_12:55:01*
내 문제는 11시 30분에서 12시 30분 사이에 파일을 특정 폴더에 복사하는 것입니다. 출처: /home/Downloads/thread_dumps
목적지:/home/test
답변1
명령을 사용 find
하고 모든 파일이 동일한 패턴(시간으로 끝남)을 따른다고 가정합니다.
find /home/Downloads/thread_dumps \( -name '*11:[3-5][0-9]:*' -o -name '*12:[0-2][0-9]:*' -o -name '*12:30:[0-5][0-9]*' \) -exec cp --target-directory=/home/test {} +
위의 명령은 파일을 복사합니다. 12:30:??
(시간이 12:31 이상인 경우 파일은 고려되지 않습니다.)
파일을 원하지 않으면 12:30
다음 find
명령을 사용해야 합니다.
find /home/Downloads/thread_dumps \( -name '*11:[3-5][0-9]:*' -o -name '*12:[0-2][0-9]:*' \) -exec cp --target-directory=/home/test {} +
답변2
grep
Shell glob을 사용하면 또는 같은 다른 명령에 의존하지 않고도 원하는 것을 얻을 수 있습니다 find
. 여기에는 타임스탬프가 12:30인 파일이 포함됩니다.
cp /home/Downloads/thread_dumps/thread_dump_10-10-22_11:[345]* \
/home/Downloads/thread_dumps/thread_dump_10-10-22_12:[012]* \
/home/Downloads/thread_dumps/thread_dump_10-10-22_12:30* \
/home/test
참고로 여기서 마지막 *
은와일드카드*
그리고 그것은 당신의 파일이 가지고 있는 것처럼 보이는 것과는 아무런 관련이 없습니다.
답변3
간단히 이 파일을 복사하면 일치하는 쉘 글로브가 생성됩니다.
cp /home/Downloads/thread_dumps/thread_dump_10-10-22_11:[345]?:?? /home/test
cp /home/Downloads/thread_dumps/thread_dump_10-10-22_12:[12]?:?? /home/test
cp /home/Downloads/thread_dumps/thread_dump_10-10-22_12:30:00 /home/test
세 개의 명령으로 함께 넣었지만 원하는 경우 세 가지 소스 패턴을 모두 동일한 cp
명령에 넣을 수 있습니다. 세 개의 개별 인수로 직접 넣거나 {x,y,z}
중괄호 확장을 사용하여 결합할 수 있습니다. 여기서 했던 것처럼:
# Assuming `bash` or `ksh`
cp /home/Downloads/thread_dumps/thread_dump_10-10-22_{11:[345]?:??,12:[12]?:??,12:30:00} /home/test
12:30 파일을 포함하지 않으려면 세 번째 명령(또는 패턴)을 생략하세요.
이 [...]
구성 요소는 포함된 문자와 일치합니다. ?
단일 문자와 일치합니다 . (아마도 *
0개 이상의 문자와 일치하는 에 가장 익숙할 것입니다 .)
답변4
그리고 zsh
:
cp thread_dump_10-10-22_??:??:??(e['
[[ $REPLY[-8,-1] > 11:30 && REPLY[-8,-1] < 12:31 ]]']) /home/test
이는 e
glob 한정자를 사용하여 일부 코드의 평가를 기반으로 파일을 선택합니다 e
(고려할 파일은 변수에 있음 $REPLY
). 여기서는 파일명의 마지막 8자를 문자열 비교하여 11:30:00부터 12:30:59까지로 끝나는 파일을 선택합니다.