programing

* 경유로 숨김 파일을 포함한 모든 파일을 부모 디렉토리로 이동하는 방법

muds 2023. 4. 16. 15:57
반응형

* 경유로 숨김 파일을 포함한 모든 파일을 부모 디렉토리로 이동하는 방법

인기 있는 질문일 텐데 답을 찾을 수가 없었어요.

숨김 파일을 포함한 * 경유로 모든 파일을 부모 디렉토리로 이동하는 방법:

mv /path/subfolder/* /path/

이렇게 하면 모든 파일이 예상대로 상위 디렉토리로 이동되지만 숨겨진 파일은 이동되지 않습니다.어떻게 하는 거야?

에 대한 포괄적인 솔루션 세트는 UNIX & Linux의 "How do you move all files (hidden을 포함한)"라는 답변에서 찾을 수 있습니다.Bash, zsh, ksh93, standard (POSIX) sh 등으로 솔루션을 표시합니다.


다음 두 명령을 함께 사용할 수 있습니다.

mv /path/subfolder/* /path/   # your current approach
mv /path/subfolder/.* /path/  # this one for hidden files

또는 모두 함께(고맙습니다)

mv /path/subfolder/{.,}* /path/

그 결과, 다음과 같이 확장됩니다.

mv /path/subfolder/* /path/subfolder/.* /path/

(필수:echo a{.,}b까지 확장하다.a.b ab)

여기에는 몇 가지 경고가 표시됩니다.

mv: cannot move ‘/path/subfolder/.’ to /path/.’: Device or resource busy
mv: cannot remove /path/subfolder/..’: Is a directory

그냥 무시해 주세요.이렇게 되는 이유는/path/subfolder/{.,}*로도 확장된다./path/subfolder/.그리고./path/subfolder/..디렉토리 및 부모 디렉토리입니다(폴더에 있는 경우의 「」및 「..」를 참조해 주세요).


카피만 하고 싶은 경우는, 다음의 조작만을 사용할 수 있습니다.

cp -r /path/subfolder/. /path/
#                     ^
#                     note the dot!

이렇게 하면 일반 파일과 숨김 파일을 모두 복사할 수 있습니다./path/subfolder/.「이 디렉토리의 모든 것」으로 전개합니다.(출처:숨김 파일, 숨김 디렉토리 및 그 내용을 포함하기 위해 cp를 사용하여 복사하려면 어떻게 해야 합니까?

이게 제일 우아한 것 같아요.움직이지도 않고..:

mv /source/path/{.[!.],}* /destination/path

이렇게 하면 모든 파일이 예상대로 상위 디렉토리로 이동되지만 숨겨진 파일은 이동되지 않습니다.어떻게 하는 거야?

켜도 돼dotglob:

shopt -s dotglob               # This would cause mv below to match hidden files
mv /path/subfolder/* /path/

끄려면dotglob다음과 같이 말할 필요가 있습니다.

shopt -u dotglob

를 사용하여find명령과 함께 명령하다mv명령어를 사용하면,mv디렉토리 이동 시도로부터의 명령어(예:..그리고..및 서브디렉토리.한 가지 옵션이 있습니다.

find /path/subfolder -maxdepth 1 -type f -name '*' -exec mv -n {} /path \;

제공된 다른 답변 중 일부에 문제가 있습니다.예를 들어, 다음 각 항목은 원본 경로에서 하위 디렉터리를 이동하려고 시도합니다.

1) mv /path/subfolder/* /path/ ; mv /path/subfolder/.* /path/
2) mv /path/subfolder/{.,}* /path/ 
3) mv /source/path/{.[!.],}* /destination/path

또한 2)는 및 을 포함합니다.files and 3) 다음과 같은 파일이 누락됩니다.푸바, ...바푸 등

사용할 수 있습니다.mv /source/path/{.[!.],..?,}* /destination/path3이 놓친 파일을 포함하지만 하위 디렉토리의 이동을 시도합니다.사용방법find을 지휘하다mv위에서 설명한 명령어를 사용하면 이러한 문제가 모두 해소됩니다.

보다 간단한 대체 솔루션은rsync유틸리티:

sudo rsync -vuar --delete-after --dry-run path/subfolder/ path/

주의: 위의 명령어는 변경 내용을 표시합니다.실제 변경을 실행하려면 를 삭제합니다.

은 원래 폴더 「 」 「 」 「 」 )를 할 수 것입니다.subfolder와 함께 되며, 를 사용할 때는 됩니다.mv이 예에서는 폴더를 정리해야 합니다.숨겨진 파일과 숨기지 않은 파일을 하나의 패턴으로 처리하는 데 문제가 되는 것은 말할 것도 없습니다.

.rsync는, 을 서포트하고 .이것에 , 됩니다( 「복사」, 「복사」, 「복사」, 「복사」, 「복사」( ).-a를 참조해 주세요.

한 「」-u 파일인 "새로운 파일"을 .-r 및 디렉토리로 되돌아가다-v이치노

제 친구 "닷글로브"를 소개합니다."*"에 숨겨진 파일이 포함되어 있는지 여부에 관계없이 켜지거나 꺼집니다.

$ mkdir test
$ cd test
$ touch a b c .hidden .hi .den
$ ls -a
. ..  .den  .hi .hidden a b c

$ shopt -u dotglob
$ ls *
a b c
$ for i in * ; do echo I found: $i ; done
I found: a
I found: b
I found: c

$ shopt -s dotglob
$ ls *
.den  .hi .hidden a b c
$ for i in * ; do echo I found: $i ; done
I found: .den
I found: .hi
I found: .hidden
I found: a
I found: b
I found: c

기본값은 "off"입니다.

$ shopt dotglob
dotglob         off

작업을 마치면 다시 켜는 것이 가장 좋습니다. 그렇지 않으면 꺼진 것으로 추정되는 것들이 혼란스러워질 수 있습니다.

모든 파일을 복사해야 할 때 이 문제를 해결하는 방법(다음 포함).files)는 다음과 같은 권한을 보유한 대상 디렉토리에 대해 다음과 같이 처리됩니다. (이미 존재하는 경우 제외됩니다.

yes | cp -rvp /source/directory /destination/directory/

yes는, 파일을 자동적으로 하기 위한 입니다.r "재귀",v, 상술p한을보보보보

소스 패스가 로 끝나지 않는 에 주의해 주세요(따라서 모든 파일/디렉토리와 .파일이 복사됩니다).

소스 폴더의 내용을 전체적으로 대상에 배치하기 때문에 대상 디렉토리는 로 끝납니다.

그냥 해

for I in $(ls -A dir)
do
mv dir/$I newDir
done

서브폴더 실행 중임을 전제로 합니다.find . -maxdepth 1 -exec mv {} .. \;

언급URL : https://stackoverflow.com/questions/20192070/how-to-move-all-files-including-hidden-files-into-parent-directory-via

반응형