여러 jar를 실행하여 서로 다른 디렉토리에 있는 서로 다른 파일을 작성하는 쉘 스크립트를 실행 중입니다.
마지막으로 스크립트를 실행했을 때의 출력으로 디렉터리에 생성된 파일 목록을 가져오고 싶습니다.
내 파일의 이름은 입니다 date_time_ABC.txt
. 날짜별로 파일 이름을 가져오고 싶지만 특정 날짜에 여러 번 실행할 수 있으므로 이전 실행에서 생성된 파일을 포함하여 모든 파일을 가져옵니다.
쉘 스크립트를 실행한 후 생성된 파일 목록을 얻는 방법이 있습니까? 제안해주세요.
답변1
만약 당신의시간포함되어 있지 않다두번째ls
, 다음 옵션을 사용할 수 있습니다 -u
.
-u 및 -lt: 액세스 시간을 기준으로 정렬하고 표시합니다. -l을 사용하면 액세스 시간을 표시하고 이름을 기준으로 정렬합니다. 그렇지 않으면 액세스 시간을 기준으로 정렬합니다.
그렇지 않으면 현재 파일을 나열 ls -u -1>../Before
하고 코드 다음에 다시 실행하면 다음을 사용하여 작업이 완료됩니다 ls -u -1 > ../After
. comm -3 ../After ../Before
답변2
그냥 생각입니다. 2개의 디렉터리를 유지하세요. 첫 번째 디렉터리에는 스크립트와 관련된 파일(작업 디렉터리)이 포함되고 두 번째 디렉터리에는 동기화 파일(미러 디렉터리)이 포함됩니다. 스크립트 동기화 명령의 첫 번째 줄에 입력하세요.
rsync -xrlptgoEvv /home/user/work/ /home/user/mirror/
그리고 스크립트 명령 끝에서 디렉터리 간의 차이를 감지 work
하고 mirror
출력을 일반 텍스트 파일로 리디렉션합니다.
diff -rq /home/user/work/ /home/user/mirror/ > /home/user/list-of-files.txt
diff
등을 사용하여 명령 출력을 필터링하여 필요한 데이터 형식을 얻을 수도 있습니다 sed
. awk
또한 마지막 동기화 이후 디렉토리에서 제거된 파일을 디렉토리에서 삭제하는 옵션도 고려하십시오 --delete
.rsync
mirror
work
고쳐 쓰다.더 나은 접근 방식은 스크립트 위에 파일 목록을 만드는 것입니다.
ls -la /home/user/work/ > /home/user/list-of-files.txt
그리고 스크립트 하단에서 새 파일 목록을 이전 목록에 추가하고 이를 정렬한 후 새 파일을 나타내는 고유한 줄만 필터링합니다.
ls -la /home/user/work/ >> /home/user/list-of-files.txt
cat /home/user/list-of-files.txt | sort | uniq -u > /home/user/list-of-new-files.txt