이름이 tomcat_으로 시작하는 서버에 여러 개의 디렉토리가 있습니다. 이 디렉토리에 preparetest.class와 같은 파일이 있습니다.
이제 특정 파일의 수정 날짜와 시간을 다음 형식으로 가져와야 합니다.
폴더 이름 수정 날짜
답변1
cd
디렉터리가 있는 디렉터리로 이동하여 tomcat_*
(모두 같은 디렉터리에 있을 필요는 없음) 다음 명령을 실행합니다.
find . -path "./*tomcat_*managetest.class"
예를 들면 다음과 같습니다.
./b/tomcat_c/managetest.class
./tomcat_a/managetest.class
./tomcat_a/b/managetest.class
하지만 ./b/c/managetest.class
. managetext.class
지금 당장 들어가야 한다면 알려주세요 tomcat_*
.
이제 수정된 날짜를 인쇄하는 전체 명령은 다음과 같습니다.
find . -path "./*tomcat_*managetest.class" -exec stat -c "%n %y" {} \;
awk를 사용하여 위 명령 끝에 이와 같은 내용을 작성하여 더 관심 있는 필드(예: 연도 또는 시간)를 선택할 수 있습니다. 또는 gogoud가 제안한 대로 | awk '{print $1" "$2" "$3}'
exec를 사용하는 대신 의 명령을 사용할 수 있습니다.find
printf
답변2
Ulrich가 제안한 대로 다음을 수행할 수 있습니다 find
.
find "/mydir" -type f -regex ".*/tomcat_.*/managetest.class" -printf "%h %T+\n"
고쳐 쓰다:
필요한 형식을 얻으려면 awk를 통해 출력을 파이프할 수 있습니다.
find "/mydir" -type f -path "*/tomcat_*/managetest.class" -printf "%h %T+\n" | awk -F"[ /.]" '{print $(NF-4),$(NF-1)}'
awk 문은 출력을 "[space]/"의 임의 문자에 있는 필드로 분할합니다. - 그런 다음 더 높은 수준의 디렉터리, 파일 이름 또는 순간이 표시되지 않도록 필요한 필드인 네 번째이자 마지막 필드를 인쇄합니다. (나도 find
s를 -path
대신 사용하기로 전환했지만 -regex
둘 다 동일한 목표를 달성합니다.)