내 문제는 다음과 약간 다릅니다.
파일 이름으로 디렉터리를 만들고 파일을 해당 폴더로 이동합니다.
동일한 폴더에 각 파일의 유사한 복사본이 두 개 있기 때문입니다. 예를 들면 다음과 같습니다.
001.txt 및 001(1).txt
…
100.txt 및 100(1).txt
두 개의 유사한 복사본마다 폴더를 만들고 두 개의 유사한 복사본을 하나의 폴더로 이동합니다. 001.txt 및 001(1).txt는 001 폴더에 저장됩니다.
위의 질문을 기반으로 했지만 작동하지 않습니다. 위 질문에 대한 명령은 다음과 같습니다.
set -o errexit -o nounset
cd ~/myfolder
for file in *.txt
do
dir="${file%.txt}"
mkdir -- "$dir"
mv -- "$file" "$dir"
done
시험을 마친:
set -o errexit -o nounset
cd ~/myfolder
for file in *(1).txt
do
dir="${file%.txt}"
mkdir -- "$dir"
mv -- "$file" "$dir"
done
이 명령은 각 파일에 대한 폴더를 생성합니다.
폴더를 만드는 데 필요한 파일을 선택한 다음 다른 명령을 실행하여 동일한 대상을 보관할 수 있도록 001.txt 및 001(1).txt와 같은 파일을 구별하는 제안이 있습니까?
답변1
거의 다 왔습니다. 당신이 놓치고 있는 것은 디렉토리를 파생시키기 위해 파일 이름에서 괄호 안의 숫자를 제거해야 한다는 것입니다.
#!/bin/sh
for file in *.txt
do
dir="${file%.txt}" # Remove suffix
dir="${dir%(*)}" # Remove bracketed suffix if present
mkdir -p -- "$dir" # Create if necessary
mv -f -- "$file" "$dir" # Move the file
done
mkdir
및 앞에 접두사를 추가하면 작업이 수행되기 전에 어떤 일이 발생하는지 확인할 수 있습니다 mv
.echo