이러한 특정 요소를 이동하려면 어떤 명령을 사용해야 합니까?

이러한 특정 요소를 이동하려면 어떤 명령을 사용해야 합니까?

이것이 나의 초기 상황입니다.

예를 들어, 이름이 지정된 폴더에는 Father다음과 같은 방식으로 저장된 일부 파일이 있습니다. 24개의 하위 폴더( , , ... Father라고 부르겠습니다 )가 포함되어 있으며, 각 하위 폴더에는 2개의 파일이 있으며, 첫 번째 하위 폴더에는 2개의 폴더와 2개의 첫 번째 하위 폴더가 있습니다 . 두 번째 등등.Child1Child2file1.avifile1.nfofile2.avifile2.nfo

내가 하고 싶은 일은 .avi모든 파일을 폴더에 넣는 것 입니다 Father. 다른 파일이 누락되는 것은 신경 쓰지 않습니다.


지금까지 시도한 가장 좋은 방법은 a를 사용하는 것이지만 cp -R ./*.avi .폴더에서 파일을 추출하지 않고 처리하는 데 시간이 오래 걸립니다.

어떻게 써야 할까요?

답변1

glob은 *일반 파일뿐만 아니라 디렉터리도 일치시키는 데 사용할 수 있으므로 찾고 있는 명령은 다음과 같습니다.

mv ./*/*.avi .

답변2

find이 명령의 옵션을 사용할 수 있습니다 -exec.

cd Father
find Child1 Child2 ... -name '*.avi' -exec mv -n {} . +

명령은 다음과 같이 분류됩니다.

  • find Child1 Child2 ...Child1, Child2 등 아래의 모든 파일과 디렉터리가 검색됩니다. 기본 작업은 이름을 인쇄하는 것입니다.
  • -name '*.avi'이름 패턴 "*.avi"와 일치하는 파일(또는 디렉터리)로 결과를 제한합니다.
  • -exec mv {} . +find일치 결과를 인쇄하는 대신 명령이 실행될 것임을 나타냅니다 . {}명령에서 find찾은 파일 이름을 어디에 넣어야 하는지를 나타내고, +실행할 명령의 끝을 나타내며 대신 가능한 한 많은 파일 이름을 넣어야 함을 나타냅니다. 파일 이름당 한 번씩 명령을 실행합니다. 예를 들어, 다음과 같습니다.mv -n Child1/as.avi Child1/many.avi Child1/matching.avi Child1/filenames.avi Child1/as.avi Child1/possible.avi .

명령이 어떤 것인지 보고 싶다면가능한-exec echo mv그렇게 하려면 언제든지 대신 쓸 수 있습니다 .-exec mv

참고 1:명령에 도달하기 전에 쉘에 의해 파일 이름으로 확장되지 않고 -name '*.avi'텍스트가 명령 *.avi에 그대로 전달되도록 작은따옴표를 사용하십시오 .findfind

노트 2:서로 다른 디렉터리에 있지만 파일 이름이 동일한 파일 이름이 여러 개 있는 경우 이 mv명령은 해당 파일을 모두 동일한 디렉터리로 이동하고 이름이 같은 파일이 서로 덮어쓰게 됩니다. 다음 명령을 사용하여 이를 방지할 수 있습니다 mv -n(파괴 모드 없음).

관련 정보