파일 이름으로 디렉터리를 만들고 파일을 해당 폴더로 이동합니다.

파일 이름으로 디렉터리를 만들고 파일을 해당 폴더로 이동합니다.

내 문제는 다음과 약간 다릅니다.

파일 이름으로 디렉터리를 만들고 파일을 해당 폴더로 이동합니다.

동일한 폴더에 각 파일의 유사한 복사본이 두 개 있기 때문입니다. 예를 들면 다음과 같습니다.

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

관련 정보