스크립트를 사용하여 파일을 이동하는 방법

스크립트를 사용하여 파일을 이동하는 방법

실행 시 인수에 지정된 파일 형식을 해당 폴더로 이동하는(또는 파일 형식이 없으면 해당 파일 형식으로 폴더를 생성하는) 스크립트를 설계해 달라는 요청을 받았습니다.

내가 ./M6.sh mp3 txt 명령을 내린다고 가정해 보겠습니다.

이렇게 하면 현재 작업 디렉터리의 모든 mp3 파일이 "mp3"라는 폴더로 이동되고 모든 mp3 파일이 해당 폴더로 복사되며 현재 작업 디렉터리의 모든 텍스트 파일이 txt 폴더라는 폴더로 이동됩니다.

아래 코드를 작성했는데 mv 명령을 사용하는 데 문제가 있습니다.

도와주세요.

여기에 이미지 설명을 입력하세요.

답변1

코드가 불필요하게 복잡합니다. 문제는 mv대상 디렉터리가 아직 존재하지 않으면 호출할 수 없다는 것입니다. 또한 콘텐츠를 루트 디렉터리의 디렉터리로 이동하려고 시도하는 것 같습니다.

고려하다

#!/bin/sh

for suffix do
    mkdir -p -- "$suffix" || exit 1
    mv -- *."$suffix" "$suffix"
done

또는,

#!/bin/bash

suffixes=( "$@" )

for suffix in "${suffixes[@]}"; do
    mkdir -p -- "$suffix" || exit 1
    mv -- *."$suffix" "$suffix"
done

(디렉토리를 생성할 수 없을 때 스크립트를 종료하는 대신 다음 주어진 접미사로 이동하려면 이를 변경하십시오 exit 1.)continue

이는 모든 파일 이름 접미사를 반복합니다(실제로는 그렇지 않음).파일 유형"일반 파일", "디렉터리", "기호 링크" 등과 같은 Unix의 파일 형식) 해당 접미사로 명명된 하위 디렉터리가 현재 디렉터리에 생성되고 ."$suffix"이름이 해당 접미사로 끝나는 모든 파일이 생성됩니다. 접미사는 디렉토리로 이동됩니다.

디렉토리가 이미 존재하는 경우에는 명령이 mkdir -p dirname실패하지 않습니다 .dirname

예제를 실행하세요:

$ tree
.
|-- file1.mp3
|-- file1.png
|-- file1.txt
|-- file2.mp3
|-- file2.png
|-- file2.txt
|-- file3.mp3
|-- file3.png
|-- file3.txt
|-- file4.mp3
|-- file4.png
|-- file4.txt
|-- file5.mp3
|-- file5.png
|-- file5.txt
`-- script.sh

0 directory, 16 files
$ ./script.sh txt mp3
$ tree
.
|-- file1.png
|-- file2.png
|-- file3.png
|-- file4.png
|-- file5.png
|-- mp3
|   |-- file1.mp3
|   |-- file2.mp3
|   |-- file3.mp3
|   |-- file4.mp3
|   `-- file5.mp3
|-- script.sh
`-- txt
    |-- file1.txt
    |-- file2.txt
    |-- file3.txt
    |-- file4.txt
    `-- file5.txt

2 directories, 16 files

답변2

mv 명령을 사용하면 실제로 루트 디렉터리에서 폴더로 이동하려고 시도하는 것입니다. 명령은 현재 디렉터리에서 나와야 합니다.

mv *.${myarray[$index]} ./${myarray[$index]}/

이전 디렉터리를 기록해 두세요 .. 현재 디렉터리에서 폴더를 찾으라는 메시지가 표시됩니다. 그렇지 않으면 간단히 다음과 같이 작성할 수 있습니다.

mv *.${myarray[$index]} ${myarray[$index]}/

위 명령은 현재 디렉터리의 폴더도 찾습니다.

관련 정보