디렉터리를 복사하려고 하는데 특정 파일만 복사하려고 합니다.
sudo scp -r user@ip:'ls /nas1/logs/tomcat/dev-main/dev-main*|grep localhost_access_log.2023-09-21.txt' /home/test
파일이 원격 서버에 있는 경우
/nas1/logs/tomcat/dev-main/dev-main-1111/localhost_access_log.2023-09-21.txt
/nas1/logs/tomcat/dev-main/dev-main-1234/localhost_access_log.2023-09-21.txt
그런 다음 해당 파일을 로컬 서버에 복사하고 싶습니다.
/home/test/dev-main-1111/localhost_access_log.2023-09-21.txt
/home/test/dev-main-1234/localhost_access_log.2023-09-21.txt
scp 명령과 함께 grep을 사용할 수 있습니까?
답변1
rsync
댓글대로 설치되어 있지 않으니 사용 tar
하시면 됩니다.
ssh user@ip 'cd /nas1/logs/tomcat/ && tar cf - dev-main-*/localhost_access_log.2023-09-22.txt' | tar xf -
설명하다:
ssh user@ip '...'
...
원격 호스트에서 명령 실행- 이 경우 실행할 명령은
cd /nas1/logs/tomcat/ && tar cv dev-main-*/localhost_access_log.2023-09-22.txt
먼저 원격 디렉터리를 다음으로 변경한/nas1/logs/tomcat/
후tar
전송할 파일과 일치하는 glob으로 실행하는 것입니다. - 이
tar
명령은c
아카이브를 표준 출력으로 덤프하는 옵션과 함께 제공됩니다(해당 옵션이 없으면 구현 및/또는 환경에 따라 기본 테이프 장치 또는 표준 출력으로 보냅니다). 여기에 로컬 명령에 대한 파이프가 있습니다.f -
f
tar
tar
- 이
tar xf -
부분은 표준 입력(파이프의 다른 쪽 끝)에서 아카이브를 읽고 추출하여 디렉터리 구조와 일부 기타 메타데이터(p
더 많은 메타데이터를 보존하기 위해 추가된 옵션)를 보존합니다.
당신은 에 있어야합니다 /home/test/
.
답변2
명령을 경로에 넣을 수는 없지만 scp
표준 glob(와일드카드 패턴)과 일치할 수 있는 파일 세트를 원하는 것처럼 보이며 소스 경로를 유지하는 다른 도구가 있습니다.
이것은:
rsync -avR 'user@ip:/nas1/logs/tomcat/./dev-main/dev-main-*/localhost_access_log.2023-09-21.txt' /home/test/