(고쳐 쓰다:Mac OS X에서 이런 일이 발생합니다. 저는 Mountain Lion을 사용하고 있습니다. ) 때로는 키 입력을 사용하여 tab경로를 완성하므로 명령은 다음과 같습니다.
cp -r ~/some/folder/ .
그러나 위의 줄은 다르게 동작하는 것으로 나타났습니다.
cp -r ~/some/folder .
두 번째 줄은 처럼 폴더를 현재 디렉터리에 복사 folder
하지만 첫 번째 줄은 7개 파일, 6개 하위 폴더를 모두 현재 디렉터리에 복사하여 현재 디렉터리를 오염시킵니다. 특정 현재 디렉터리에 git 또는 svn을 사용하는 소스 제어가 없기 때문에 실제로 수동으로 정리해야 하는데 이는 상당히 고통스럽습니다.
이런 일이 발생하지 않도록 하는 방법이 있나요? 예를 들어 함수, 별칭 또는 Bash 설정을 생성합니까? 나는 이것을 기억할 수 있다는 것을 알고 있지만 두 달이 지나면 실제로 실수로 같은 일을 다시 할 수도 있으므로 이러한 행동을 조심하는 것이 가장 좋습니다. ( 그것이 내가 정말로 원하는 것이라면 cp -r ~/some/folder/* .
오히려 그것을 사용해야 할 것입니다 .)cp -r ~/some/folder/.* .
답변1
이를 올바르게 수행하려면 cp의 모든 옵션을 다시 분석해야 하는데 이는 좋은 생각이 아닙니다. 하지만 여기에 가까워야 할 것이 있습니다.
# run cp command as-given, unless any argument ends in a slash
safecp() {
for arg; do
case $arg in */)
echo "safecp: trailing slash in cp $*" >&2
return 1
;;
esac
done
cp "$@"
}
또는 배치해 보세요.
set mark-directories off
디렉토리를 탭으로 완성할 때 bash가 슬래시를 자동으로 추가하지 않도록 합니다 ~/.inputrc
.
답변2
물론 다음과 같은 오류를 포착하는 짧은 bash 함수(정규 표현식을 수행할 수 있는 최신 버전의 bash를 사용하면 매우 간단함)를 작성할 수 있습니다.
function cpr () {
local src=...
if [[ "$src" =~ /$ ]]; then
# handle error
else
# proceed with copying
fi
}
까다로운 부분은 dest
그것이 무엇이어야 하는지(물론 대상 디렉터리를 건너뛰고 싶음) 그리고 옵션의 모든 조합을 포함하려는지 cp
(적어도 GNU coreutils에는 cp
3가지 다른 구문 변형이 있음)를 파악하는 것입니다.
특수한 기능을 사용하여 해당 위치에서 수정하는 것이 더 나을 수도 있습니다.
function cpr () {
cp -R ${1%%/} ${2}
}