"mv *"는 어떻게 되었습니까? 오류가 표시되지 않았으며 이제 하나의 폴더 만 남았습니다. 왜?


12

14GB의 데이터가있는 폴더에서 실행 된 명령은 "mv space *"입니다.

mv *

du -hs 

14GB의 데이터가 어디로 갔습니까? 내가 무슨 짓을 한?


더 많은 정보가 필요합니다. 어떤 플랫폼?
Jarmund

4
@Jarmund 언급 한 두 명령이 모두 유닉스 계열 시스템에서 일반적인 명령이라는 점을 고려하면 일부 * nix를 가정하는 것이 안전하다고 생각합니다. 이와 관련하여 대부분의 껍질이 동일하게 작동한다고 말하는 것이 안전하다고 생각합니다. 따라서 정확한 플랫폼이 명시 적으로 명시되어 있지 않더라도 유용한 답변을 제공 할만큼 충분히 추론 할 수 있습니다.
CVn


언급 할 또 다른 함정. 신뢰할 수없는 데이터에서mv 또는 cp" "를 사용하여 실행해서는 안됩니다 . " "가 확장되고 "--verbose"와 같은 이름의 파일이 명령 줄 인수를 가져 오기 때문입니다. 대신 사용해야 할 것 :cp ./* anotherFolder
VasyaNovikov

답변:


31

bash는 와일드 카드를 확장하여 모든 폴더를 마지막 폴더로 옮깁니다.

예를 들면 다음과 같습니다.

$ ls
test1  test2  test3  test4

$ mv *

$ ls
test4

$ ls test4
test1  test2  test3

여기서, mv *확장되는 mv test1 test2 test3 test4대응 mv [OPTION]... SOURCE... DIRECTORY포맷. 따라서 모든 폴더가 마지막 폴더로 이동됩니다.


9
이. 그건 그렇고, (또는 ) *에서 사용하려면 스위치를 살펴보십시오 . 그것은 당신이 이와 같은 것들에 조금도 걸리지 않도록합니다. mvcp--target-directory
CVn

2

@ssssteffff에서 설명했듯이 mv *셸은 현재 디렉토리의 파일에서 와일드 카드 확장을 수행합니다. 그러나 mv명령 의 동작은 *확장되는 인수 수에 따라 다릅니다 . 인수가 두 개 이상인 경우 마지막 인수는 디렉토리 여야합니다.

   mv [OPTION]... SOURCE... DIRECTORY

그래서,

5 개의 파일을 만들었습니다

$ touch 1 2 3 4 5
$ ls
1  2  3  4  5
$ mv *
mv: target ‘5’ is not a directory
$ ls
1  2  3  4  5

이제 와일드 카드 확장의 마지막 매개 변수로 제공되는 디렉토리를 작성하면 다음과 같습니다.

$ mkdir 6
$ mv *
$ ls
6
$ ls 6
1  2  3  4  5

마지막 인수가 무엇인지 다시 확인해야합니다.

  • 마지막 인수가 디렉토리라면 데이터가 안전 할 것입니다.
  • 인수의 총 개수가 2이고 마지막 인수가 디렉토리 인 경우 데이터도 안전합니다.
  • 총 인수 수가 2이고 마지막 인수가 파일 인 경우 두 번째 파일은 확실하게 사라집니다.

이와 같은 오류가 표시되지 않습니까?

 mv: target ‘5’ is not a directory`
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.