1번 디렉토리의 내용을 2번 디렉토리로 복사하고 싶습니다. 그러나 디렉터리가 아닌 디렉터리 1에서만 파일을 복사하고 싶습니다. 어떻게 해야 합니까?
cp dir1/* dir2/*
음, 여전히 디렉토리 문제가 있습니다.
또한 내 파일에는 확장자가 없으므로 *.*
작동하지 않습니다.
답변1
cp dir1/* dir2
cp
명시적으로 지시하지 않는 한 디렉토리는 복사되지 않습니다( 예를 들어 --recursive
참조 man cp
).
참고 1: cp
0이 아닌 상태로 종료될 가능성이 높지만 파일은 어쨌든 복사됩니다. 이는 종료 코드( &&
, 등) 를 기반으로 명령을 연결할 때 문제가 될 수 있습니다. (감사합니다 ||
.if cp -r dir1/* dir2; then ...
콘테비스~을 위한이 문제에 대해 그들이 말한 것)
노트 2: cp
마지막 인수는 단일 파일 이름 또는 디렉터리일 것으로 예상됩니다. *
대상 디렉터리 이름 뒤에는 와일드카드 문자가 없어야 합니다. .예기치 않은 일 dir2\*
처럼 셸에 의해 확장됩니다.dir1\*
~ 할 것이다발생하다:
- 비어 있고
dir2
쉘 및 설정에 따라 다릅니다.- 최상의 시나리오인 오류 메시지만 나타날 수 있습니다.
dir2/*
문자 그대로 사용되며( 이름이 지정된 파일/디렉토리 찾기 ) 실제로 존재*
하지 않는 한 오류가 발생할 수도 있습니다 .*
dir2/*
cp dir1/*
확장자에 따라 명령에서 완전히 제거되어dir1/*
데이터가 손상될 수도 있습니다.dir1/*
파일이나 디렉터리가 하나만 일치 하면 오류가 발생합니다cp
.- 정확히 두 개의 파일이 일치 하면
dir1/*
한 파일이 다른 파일로 덮어쓰여집니다(나쁜). dir/*
여러 파일이 일치하고 마지막 일치 항목이 a인 경우 오류 메시지가 표시됩니다.- 마지막 일치 항목
dir/*
이 디렉터리인 경우 다른 모든 일치 항목은 해당 디렉터리로 이동됩니다.
- 비어 있지 않으면
dir2
다시 다음에 따라 달라집니다.- 마지막 일치 항목
dir2/*
이 디렉터리인 경우dir1/*
다른 일치 항목이dir2/*
안으로 이동됩니다. - 마지막 일치 항목
dir2/*
이 파일인 경우 오류 메시지가 나타날 수 있습니다.~하지 않는 한dir1/*
하나의 파일만 일치합니다.
- 마지막 일치 항목
답변2
명령이 아닌 와일드카드를 확장하는 것은 쉘입니다. 따라서 cp dir1/* dir2/*
먼저 두 개의 와일드카드를 확장한 다음 cp
결과를 호출하세요. 이는 예상한 것과 전혀 다릅니다. dir2
에 이미 있는 파일 수에 따라 dir2/*
하나 이상의 매개변수로 확장될 수 있습니다. 이 명령은 cp
첫 번째 모드를 확장하여 가져온 매개변수와 두 번째 모드를 확장하여 가져온 매개변수를 알지 못합니다. 마지막 매개변수는 대상 디렉터리의 이름이 될 것으로 예상됩니다. 따라서 디렉터리의 모든 파일을 dir1
디렉터리로 복사하려면 dir2
마지막 매개변수가 디렉터리여야 합니다 dir2
.
cp dir1/* dir2
*
모든 파일이 일치 하므로 cp
모든 파일을 복사하려고 시도합니다. 여기에는 디렉터리가 포함됩니다. 디렉터리도 파일입니다. 디렉터리를 건너뛰지만 오류를 보고합니다. 명명된 파이프(무언가를 기록해 두는 것이 더 낫습니다. 그렇지 않으면 cp
차단됩니다) 등과 같은 특수 파일의 내용을 복사합니다.
복사만 가능정기적인파일의 경우 일치 항목을 제한해야 합니다. zsh에서는 사용할 수 있습니다글로벌 예선 .
그 이유는 다음과 같습니다.
cp dir1/*(.) dir2
다른 껍질에는 이것이 없습니다. 이 find
명령을 사용하여 파일 형식을 필터링할 수 있습니다. 내장되지 않은 Linux 또는 Cygwin을 실행한다고 가정합니다.
find dir1 -maxdepth 1 -type f -exec cp -t dir2 {} +
Linux, FreeBSD 및 OSX의 경우:
find dir1 -maxdepth 1 -type f | xargs -I {} cp {} dir2
답변3
"cp" 대신 "rsync"를 사용할 수 있습니다.
rsync -vt dir1/* dir2/
더 깨끗하고 어떤 경우에는 더 빠릅니다.
답변4
다음은 원본 디렉터리에서 대상 디렉터리로 파일을 복사하는 명령입니다.
소스 폴더로 이동하여 다음 명령을 작성하십시오.
$ cp fileName destination directory path
예:
cp publichOT.sh /data/home/useradmin