답변:
폴더의 내용을 재귀 적으로 복사하려면 (아래 오류 1이 발생합니다) :
cp -r * sub/
조금 더 해킹되었지만 비어 있지 않은 하위 디렉토리에서 작동합니다.
TARGETDIR='targetdir here';cp -r `find . -maxdepth 1 ! -name "$TARGETDIR"` "$TARGETDIR"
다른 oneliner :
TARGETDIR='targetdir here';for file in *;do test "$file" != "$TARGETDIR" && cp "$file" "$TARGETDIR/";done
또는 재귀 :
TARGETDIR='z';for file in *;do test "$file" != "$TARGETDIR" && cp -r "$file" "$TARGETDIR/";done
find
코드에 만족한다 : D
xargs
또는을 사용하십시오 -exec
. grep
사용할 필요가 없습니다 ! -name "$TARGETDIR"
. 주위에 따옴표가 일치하지 않습니다 $file
. 재귀 cp
가 첫 번째 명령 이외의 방식으로 작동 한다고 생각하지 않습니다 .
target
쉘이 bash 인 경우 대상 서브 디렉토리의 이름이라고 가정 하십시오.
shopt -s extglob
cp -r !(target) target/
ksh에서는 직접 할 수 있습니다 cp -r !(target) target/
.
zsh을, 당신은 할 수있는 setopt ksh_glob
다음 cp -r !(target) target/
. 또 다른 가능성은 setopt extended_glob
다음과 같습니다 cp -r ^target target/
.
이것이 당신을 위해 작동합니까?
cp -r * subdir/
현재 디렉토리의 모든 것을 서브 디렉토리로 복사하는 대신 이동하려는 경우 다음을 수행 할 수 있습니다.
mv * subdir/
대상 디렉토리 자체를 포함하지 않고 도트 파일을 포함하여 모든 것을 대상 디렉토리에 복사합니다 SUBDIR
.
for i in `ls -a | grep -Ev '^(SUBDIR|\.\.?)$'`; do cp $i SUBDIR; done
이것은 dirCopy.sh 파일이라고합니다.
for i in `ls`
do
if [ $i != "subDir" ]
then
`cp -r $i subDir`
fi
done
콘솔에서 "sh dirCopy.sh"로 실행하십시오.
ls
: for file in *
. 백틱 사용이 필요하지 않습니다 $()
. 명령 $()
주위 에 백틱 (또는 )이 필요하지 않습니다 ( cp
오류 메시지가 생성됨).