
EX5_##.bak라는 파일 목록이 있습니다. 나는 각 디렉토리가 EX5_##이라는 디렉토리에 있기를 원합니다.
예
EX5_01.bak
EX5_02.bak
EX5_03.bak
나는 그것들을 디렉토리에 넣고 싶다. 그래서 내가 입력할 때
ls -l
나는 얻다:
EX5_01
EX5_02
EX5_03
그리고 이것들은 디렉토리 이름이고 해당 디렉토리에는 동일한 이름을 가진 파일이 있습니다. 나는 무엇을 해야 합니까? 이를 달성하기 위해 명령이나 Bash 스크립트를 작성할 수 있습니까?
답변1
간단한 쉘 루프:
#!/bin/sh
for file in ./EX5_??.bak; do
dir=${file%.bak}
mkdir -p "$dir" && mv -i "$file" "$dir"
done
이는 EX5_??.bak
현재 디렉터리의 모든 파일에 대해 반복됩니다( ?
단일 문자와 일치). 각 파일에 대해 .bak
파일 이름에서 접미사를 제거하여 디렉터리 이름을 생성합니다 ${file%.bak}
. 그런 다음 디렉터리가 아직 없으면 디렉터리를 만들고, 디렉터리를 만드는 데 문제가 없으면 파일을 해당 디렉터리로 이동합니다.
파일을 더 정확하게 선택해야 하는 경우 모드를 반복으로 사용할 수 있습니다 ./EX5_[0-9][0-9].bak
. EX5_AA.bak
비슷한 파일이 있는 경우 유용할 수 있습니다.아니요루프에 포함되기를 원합니다.
이 -p
옵션을 사용 mkdir
하면 유틸리티에서 디렉터리가 이미 존재한다는 오류를 오류로 처리하지 않게 됩니다(중간 디렉터리도 생성하지만 이 경우에는 실제로 사용되지 않습니다).
이 -i
옵션을 사용하면 mv
대상 디렉터리의 파일을 덮어쓰기 전에 확인을 요청하게 됩니다. 여기서는 안전 조치로 사용합니다.