상위 폴더가 있고 이 폴더에는 4개의 파일이 있습니다.
ParentFolder
File1.txt
File2.txt
File3.txt
File4.txt
상위 폴더 내에 파일 이름으로 하위 폴더를 만든 다음 다음과 같은 이름으로 각 파일을 폴더 내부로 이동하고 싶습니다.
ParentFolder
File1
File1.txt
File2
File2.txt
File3
File3.txt
File4
File4.txt
배치 또는 tsch 스크립트에서 이 작업을 어떻게 수행할 수 있나요? 나는 다음 스크립트를 시도했습니다.
#!/bin/bash
in=path_to_my_parentFolder
for i in $(cat ${in}/all.txt); do
cd ${in}/${i}
ls > files.txt
for ii in $(cat files.txt); do
mkdir ${ii}
mv ${ii} ${in}/${i}/${ii}
done
done
답변1
당신은 이것을 너무 복잡하게 만들고 있습니다. 당신이 무엇을 하려는지 이해가 안 돼요 all.txt
. 디렉터리의 파일을 열거하려면 호출하지 마세요 ls
. 이는 더 복잡하고어쨌든 안정적으로 작동하지 않습니다. 사용하다와일드카드 패턴.
.txt
파일 이름 끝의 확장자( )를 제거하려면 접미사 제거 기능을 사용하십시오.변수 대체.
변수 대체에는 항상 큰따옴표를 사용하세요..
cd ParentFolder
for x in ./*.txt; do
mkdir "${x%.*}" && mv "$x" "${x%.*}"
done
답변2
루핑 대신 사용할 수 있습니다find
find ParentFolder/* -prune -type f -exec \
sh -c 'mkdir -p "${0%.*}" && mv "$0" "${0%.*}"' {} \;
답변3
아니면 정말 간단하게 유지할 수도 있습니다. 사용 basename
, 부분 coreutils
.
cd ParentFolder &&
for i in ./*.txt
do
d=$(basename "$i" .txt)
mkdir "$d" && mv "$i" "$d"
done