스크립트의 출력으로 파일 목록을 얻으시겠습니까?

스크립트의 출력으로 파일 목록을 얻으시겠습니까?

여러 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.rsyncmirrorwork

고쳐 쓰다.더 나은 접근 방식은 스크립트 위에 파일 목록을 만드는 것입니다.

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

관련 정보