많은 .txt 파일이 포함된 큰 폴더가 1개 있습니다.
rules.csv
이 .txt 파일을 파일 내의 특정 규칙(해당 하위 폴더)에 따라 별도의 하위 폴더로 그룹화 하려고 합니다 .
대용량 폴더:
file1.txt
file2.txt
...
file100.txt
규칙은 다음과 같습니다:
파일 1.txt
파일 3.txt
파일 8.txt
"하위 폴더 1"에 속함
파일 2.txt
파일 4.txt
파일 23.txt
"하위 폴더 2"에 속함
등
다음은 CSV 형식(rules.csv)의 규칙 목록입니다.
첫 번째 열은 파일 이름이고 두 번째 열은 파일을 이동하려는 하위 폴더입니다.
file1.txt subfolder1
file3.txt subfolder1
file8.txt subfolder1
file2.txt subfolder2
file4.txt subfolder2
file23.txt subfolder2
file5.txt subfolder3
file6.txt subfolder3
file9.txt subfolder3
file11.txt subfolder3
file16.txt subfolder3
file12.txt subfolder4
file13.txt subfolder4
file14.txt subfolder4
file19.txt subfolder4
file24.txt subfolder4
file28.txt subfolder4
file30.txt subfolder4
file78.txt subfolder5
file37.txt subfolder5
file49.txt subfolder5
file88.txt subfolder5
이것이 내가 달성하려는 것입니다.
"mv"와 같은 터미널 명령을 기반으로 이러한 .txt 파일을 해당 하위 폴더로 이동하고 위에 언급된 CSV 파일에서 이러한 규칙을 읽는 방법이 있습니까? (가능한지 확실하지 않음)
나는 이런 것을 시도했다
mv file1.txt,file3.txt,file8.txt* /subfolder1
하지만 규칙 없이 모든 사람을 위해 수동으로 수행하는 것은 비생산적인 것 같습니다 :(
답변1
질문에서 알 수 있듯이 파일 이름에 공백이 없지만 공백이 없다고 가정하면 간단한 셸 루프를 사용하여 파일을 두 번째 열의 해당 디렉터리로 이동할 수 있습니다.
while IFS=' ' read -r fileName dirName; do
mkdir -p "./$dirName" && mv "./$fileName" "./$dirName";
done <rules.txt
만약 당신의rules.csv
실제로는 .csv 파일(쉼표로 구분된 파일)인 경우 IFS=,
위의 내용을 변경할 수 있습니다(파일 이름이나 디렉터리 이름에는 쉼표 문자가 포함되어서는 안 된다는 점을 기억하세요).