유닉스에서 파일 만 옮기는 방법


18

mv명령을 사용하여 Linux의 한 폴더에서 다른 폴더로 일반 파일 (디렉토리가 아닌) 만 이동할 수 있습니까?

나는 시도 mv * ~/했지만 디렉토리를 포함한 모든 것을 복사 했다 .


귀하의 의견에는 추가 제한 사항이 언급되어 있습니다. 명령은 현재 작업 디렉토리에서 숨겨진 파일을 이동해서는 안됩니다. 이것이 맞다면 질문을 편집하여이 내용을 언급 해 주시겠습니까? "파일 만 이동"이라고 말하면 숨겨진 파일이 포함 된 "모든 파일 이동"을 생각하게됩니다.
quack quixote

답변:


29

당신은 시도 할 수 있습니다

find . -maxdepth 1 -type f -exec mv {} destination_path \;

2
와우, 사용법을 아는 사람이 찾기. 완전성을 위해 찾기에서 -name [^.] *를 사용해야합니다 (예 : --- find). -maxdepth 1-유형 f-이름 [^.] * -exec mv {} 경로 \;
chris

이 물건을 껍질에 넣지 마십시오. 세미콜론은 즉시 실행되도록합니다. :)
Sherwood Callaway

@SherwoodCallaway 세미콜론의 끝 표시하는 것입니다-exec
dstonek

4

나는 "모든 것에 망치를 사용한다"일종의 사람이기 때문에 다른 사람들이 외부 프로그램을 사용하는 것을 위해 본 쉘 프로그램을 사용한다.

for file in * .* 
do
  test -f "$file" && mv "$file" "$HOME"/
done

어떤 사람들은 가능한 한 적은 타이핑으로 일을하고 싶어하지만 꽤 빠른 타이피스트이고 뇌에 내장 된 물건을 가지고 있기 때문에 정확한 것을 찾는 대신이 작업을 수행하는 것이 너무 고통스럽지 않습니다. 찾아서 실행하고 모든 것을 주장합니다.

하지만 YMMV는 ...


그것을 시도해 주셔서 감사합니다. 그러나 나는 리눅스 코스에서하고있는 프로젝트 때문에 다른 대답이 필요합니다. 고마워요

1
이것은 이다 질문에 대한 답변. mv는 파일이나 디렉토리, fifo 또는 기타 특수 파일을 이해하지 못합니다. mv는 디렉토리 항목과 inode 만 이해하며, 파일 유형에 관계없이 모두 동일합니다. mv가 특정 유형의 파일 만 이동할 수있게하려면 실제로 파일이 무엇인지 확인하기 위해 실제로 inode를 볼 수있는 test 또는 find와 같은 것이 필요합니다. 즉, mv 로만 요청하면 트릭 질문이 표시됩니다 .
chris

1
그리고 그 MV가 아이 노드를 이해하고 말을 단지 기술적으로 다음 CP를 사용하면 RM,하지 (정말 다음 단지 에선 RM이다)는 MV이다, 또 다른 하나 개의 파일 시스템에서 파일을 이동시킬 수 있기 때문이다. 하드 링크 및 디렉토리 항목을보십시오.
chris

2
shorty : 이것은 좋은 대답입니다. mv 명령 (적어도 셸) 이외의 것을 사용해야합니다. 프로그래밍없이 얻을 수있는 기본 사항입니다.
Kyle Brandt

3

@Mereghost는 매우 가깝습니다. 다음은 디렉토리가 아닌 모든 파일 (숨겨진 파일 포함)을 이동시키는 것입니다.

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

.이후의 발견은 현재 디렉토리 이동하려는 파일의 소스입니다 가정합니다. 그렇지 않은 경우 다음과 같이 명령을 수정할 수 있습니다.

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

숨겨진 파일이 아닌 일반 파일 만 이동하려는 경우 :

find . -maxdepth 1 -type f -name '[!.]*' -exec mv -n {} /dest_path \;

일반 파일이 아닌 숨겨진 파일 만 이동하려는 경우 :

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

0

점이있는 이름의 폴더가없는 경우 모든 폴더를 간단히 이동할 수 있습니다.

mv . ~ / 대상 폴더

(내 가정은 모든 파일이 무언가라는 것입니다 (제 경우에는 모든 것이 보통입니다)

그러나 다른 답변 덕분에 매우 도움이되었습니다. 고마워


-1

당신은 찾기를 사용할 수 있습니다

find * -maxdepth 1 -type f -exec mv {} ~ \;

예, 잘 작동했지만 100 %는 디렉토리와 하위 디렉토리의 모든 파일을 ~ / 위치로 복사했습니다. 나는 dir에서 다른 dir로 숨겨진 파일없이 파일을 복사하는 매우 기본적인 것이 필요합니다. 그게 다야. 어쨌든 조언을 주셔서 감사합니다

maxdepth가 1 인 경우 불가능합니다.
John T

숨겨진 파일을 복사하지 않도록 수정했습니다.
John T

1
find의 구문은 디렉토리와 일치하는 작업 및 사물에 대한 설명입니다. 일반적으로 find *와 같은 와일드 카드를 붙 잡지 않고 사용하지 않을 것입니다 (예 : find / path / to / directory -name goo * -type f)
chris

1
찾기 위해 단일 경로를 건네 야 찾기가 제대로 작동합니다. 예를 들어,-find로 시작하는 파일이 있으면 예기치 않게 폭발합니다. 하나의 프로그램 만 디렉토리 항목 읽기를 수행하는 것이 훨씬 낫습니다. 예를 들어 두 가지 다른 프로그램 (찾기 및 셸)을 사용하는 것이 좋습니다.
chris

-2

mv`find ./sourcedir/* -type f` ./destdir


2
이름에 공백이있는 파일은 실패합니다. 파일 이름을 인쇄하는 명령의 출력은 올바르게 구분되지 않는 한 구문 분석되지 않아야합니다. 주요 아이디어에 대해 ls (1)의 출력을 구문 분석하지 않아야하는 이유를 참조하십시오 . find-exec옵션을 사용 하는 것이 문제를 피하는 가장 좋은 방법입니다.
slhck
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.