scp를 사용하여 한 서버에서 다른 서버로 파일을 보냅니다. 파일을 보낸 후 이름을 바꿔야 합니다. 그래서 각 파일에 대해 다음 명령을 사용합니다.
scp original-hc.db user@host:/dir/original-hc_1.db
파일 이름을 바꾸려면 단일 명령을 사용하여 모든 파일을 보내고 싶습니다. 좋다
scp *.db user@host:/dir/(actual file name before extension)_1.db
답변1
이는 루프를 사용하여 쉽게 달성할 수 있습니다.
for f in *.db
do
scp "$f" user@host:/dir/"${f%.db}"_1.db
done
이 ${f%.db}
구문은 .db
접미사를 제거합니다 $f
.
답변2
scp
여러 파일을 디렉터리에 복사하는 경우 파일 이름을 바꿀 수 없으므로 패턴 기반 이름 바꾸기를 수행하려면 추가로 또는 대신 다른 도구를 사용해야 합니다.
SCP 액세스뿐만 아니라 SFTP 액세스도 있는 경우 다음을 사용할 수 있습니다.SSHFS원격 파일이 로컬 컴퓨터에 나타나도록 합니다. 이를 통해 파일 복사 및 이름 바꾸기 도구를 사용할 수 있습니다.
mkdir mnt
sshfs user@host:/dir
pax -rw -pe -s'/\.db$/_1.db/' *.db mnt
fusermount -u mnt
대신 GNU 또는 BSD tar, zsh 등을 사용할 수 있습니다 pax
(POSIX이지만 Linux에서는 항상 패키지로 사용할 수 있지만 기본적으로 설치되지 않는 경우도 있습니다). zcp
아니면 복사를 수행하는 루프입니다.
for x in *.db; do
cp -p "$x" "mnt/${x%.db}_1.db"
done
SSHFS가 없어도 루프 방식을 사용할 수 있으나 반드시 scp
루프 내에서 사용해야 합니다.
for x in *.db; do
scp -p "$x" "user@host:/dir/${x%.db}_1.db"
done
매번 SSH 연결을 설정하는 것은 약간 느릴 수 있습니다. OpenSSH를 사용하면 연결을 한 번 열고 나중에 사용할 수 있습니다. 바라보다설정된 SSH 채널 사용
서버에 대한 전체 쉘 액세스가 필요한 또 다른 방법은 파일을 아카이브하고 아카이브를 복사하여 아카이브 또는 압축 풀기 시 이름 바꾸기 단계를 적용하는 것입니다. 예를 들어, 로컬에 GNU tar가 있는 경우(이는 내장되지 않은 Linux의 경우 항상 해당되며 gtar
일반적으로 다음과 같은 다른 Unix 변형에서 사용할 수 있습니다):
tar -cf - --transform '/\.db$/_1.db/ *.db | ssh user@host 'cd /dir && tar -xf -'
BSD tar의 경우 --transform
로컬 -s
tar가 매우 제한되어 있지만 서버에 GNU tar 또는 BSD tar가 있는 경우 서버 측에서 이름 바꾸기를 수행할 수 있습니다.
네트워크 대역폭으로 인해 병목 현상이 발생하는 경우 압축 단계를 삽입해야 할 수도 있습니다. 보관 방법을 사용하면 파이프라인에 단계를 삽입할 수 있습니다.
tar -czf - --transform '/\.db$/_1.db/ *.db | ssh user@host 'cd /dir && gunzip | tar -xf -'
-C
ssh
또는 옵션을 또는 에 전달하여 sshfs
SSH 수준에서 압축 할 수 있습니다 scp
.