![Bash 스크립트에서 디렉터리를 변경해야 합니다.](https://linux55.com/image/125716/Bash%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%97%90%EC%84%9C%20%EB%94%94%EB%A0%89%ED%84%B0%EB%A6%AC%EB%A5%BC%20%EB%B3%80%EA%B2%BD%ED%95%B4%EC%95%BC%20%ED%95%A9%EB%8B%88%EB%8B%A4..png)
파일이 전송된 후 삭제되도록 bash 스크립트에서 디렉터리를 변경하려고 합니다. 내 스크립트와 내가하고 싶은 일은 다음과 같습니다.
5행을 참조하세요.
1 #!/bin/bash
2 name=$(date '+%y-%m-%d')
3 tar -zcf /var/tmp/backups/splunkbackup$(date '+%y-%m-%d').tar.gz /opt/splunk/etc/
4 rsync -avz /var/tmp/backups/splunkbackup* [email protected]:/var/log/splunk/backups/essearchhead
5 cd /var/tmp/backups/splunkbackup*
6 rm splunkbackup*
답변1
rsync
수동으로 수행하려는 작업을 수행하는 내장 방법이 있습니다.
에서 man rsync
:
--소스 파일 삭제
rsync
이는 전송의 일부이고 수신 측에서 성공적으로 복사된 파일(예: 디렉터리가 아닌 파일)이 송신 측에서 삭제되도록 알려줍니다 .
답변2
패턴은 /var/tmp/backups/splunkbackup*
목록으로 확장될 수 있습니다.문서디렉터리 이름 대신 변경할 수 있습니다.
내 생각에는 다섯 번째 줄이 다음과 같아야합니다.
cd /var/tmp/backups
아니면 다섯 번째 줄그리고6개 라인이 1개 라인으로 대체됩니다.
rm /var/tmp/backups/splunkbackup*
답변3
디렉토리를 변경할 필요가 없습니다.
5rm /var/tmp/backups/splunkbackup*
6``
재귀적인 힘이 명령될 수도 있지만
5rm -rf /var/tmp/backups/splunkbackup*
6``
답변4
한 번에 하나의 아카이브 파일만 처리한다고 가정하면 파일 이름을 변수에 저장할 수 있습니다.
file=/var/tmp/backups/splunkbackup$(date '+%y-%m-%d').tar.gz
tar -zcf "$file" /opt/splunk/etc/
rsync -avz "$file" [email protected]:/...
rm "$file"
전송이 성공하면 파일을 삭제하고 싶을 수도 있지만 다음과 같이 할 수 있습니다.
rsync -avz "$file" [email protected]:/... &&
rm "$file"