저는 본질적으로 반복되는 복잡한 작업을 수행하기 위해 쉘 스크립트를 작성하고 있습니다. 문제 설명을 단순화하기 위해 복잡한 작업의 마지막 단계는 특정 경로(일부 복잡한 단계를 기반으로 찾은)에서 미리 정의된 대상 경로로 파일을 복사하는 것입니다. 복사된 파일의 권한은 600입니다. 644로 바꾸고 싶습니다.
하나의 명령으로 시스템에 파일을 복사하고 권한을 변경하도록 지시할 수 있는 옵션을 찾고 있습니다. 그것은 마치 -
cp -<some_flag> 644 <source_path> <destination_path>
2단계 프로세스를 통해 파일이 복사되면 파일의 권한을 변경할 수 있다고 말할 수도 있습니다. 그러나 문제가 있습니다. 그 이유는 소스 경로가 다른 명령의 출력으로 얻어지기 때문입니다. 따라서 chmod
이름으로 호출 할 스크립트를 작성하기 위해 파일 이름뿐만 아니라 파일의 절대 경로를 얻습니다 .
내 명령의 마지막 단락은 다음과 같습니다.
...| xargs -I {} cp {} /my/destination/path/
chmod
그래서 복사 후 호출되는 파일명을 알 수 없습니다.
답변1
chmod
통화에 다음 내용을 포함시키세요 xargs
.
...| xargs sh -c 'for file; do
cp -- "$file" /my/destination/path/ &&
chmod 700 /my/destination/path/"$file";
done' sh
바라보다https://unix.stackexchange.com/a/156010/22222사용된 특정 형식에 대한 추가 정보.
로컬 디렉터리에 파일 이름이 아닌 전체 경로를 입력하는 경우 다음 을 사용하여 파일 이름만 가져와야 xargs
합니다 .${file##*/}
...| xargs sh -c 'for file; do
cp -- "$file" /my/destination/path/ &&
chmod 700 /my/destination/path/"${file##*/}";
done' sh