pwd 이외의 GNU 병렬 및 기본 파일이 있습니까?

pwd 이외의 GNU 병렬 및 기본 파일이 있습니까?

저는 작업을 요청하는 호스트보다 더 강력한 원격 호스트에서 계산 비용이 많이 드는 변환을 수행하기 위해 GNU Parallel을 사용하고 있습니다.

. 에 있는 bash 스크립트를 사용하고 있으며 /usr/local/lib/myscript이를 원격 호스트에서 사용하고 싶습니다. 하지만 호스트에게 이 스크립트를 요구하고 싶지 않기 때문에 --basefile.

파일 이름만 제공하면 모든 것이 잘 됩니다. 하지만 기본 파일의 전체 경로를 제공하면 작동하지 않습니다.

표시하려면:

$ cat /tmp/common.sh
#!/usr/bin/env bash
echo "Hello world! from $(hostname)"

$ cd /tmp
$ parallel --nonall -S 2/user@remote-host --basefile common.sh --cleanup bash common.sh
Hello world! from remote-host

$ parallel --nonall -S 2/user@remote-host --basefile     /tmp/common.sh --cleanup "bash {}"
could not make way for new symlink: tmp
rsync error: some files could not be transferred (code 23) at /BuildRoot/Library/Caches/com.apple.xbs/Sources/rsync/rsync-47/rsync/main.c(992) [sender=2.6.9]
cannot delete non-empty directory: tmp

--basefile현재 경로 외부의 파일을 사용할 수 있는 방법이 있나요 ? 아니면 두 번째 것을 사용 --trc하고 패턴 사용 {1}및 교체를 {2}시뮬레이션 해야 합니까 --basefile?

답변1

--basefile, --transfer-file, --transfer, --returnGNU 병렬(예:)의 파일 전송은 rsync/./ 매직을 사용합니다. 따라서 전송을 요청하면 원격 측 /tmp/common.sh에 전송됩니다 . /tmp/common.sh하지만 전송을 요청하면 으로 /tmp/./common.sh전송됩니다 ./tmp/common.sh$(pwd)/.

다시 말해서:

(local file) => (remote file)
dir/file => ./dir/file
/tmp/sub/dir/file => /tmp/sub/dir/file
/tmp/sub/./dir/file => ./dir/file

현재 보고 있는 오류는 원격 시스템의 심볼릭 링크인 /tmp로 인해 발생할 수 있습니다.

를 사용하면 --workdir ...각 작업에 새로운 작업 디렉터리가 생깁니다. --basefile파일은 첫 번째 작업이 실행되기 전에만 복사되므로 작동 하지 않습니다.

대신 각 작업에 대해 common.sh를 전송할 수 있습니다.

parallel --wd ... --tf {1} -S server 'pwd ; ls; echo {2}' ::: /tmp/./common.sh ::: foo bar

관련 정보