디렉토리에는 다음 파일이 있습니다.
르브론_2018.txt 르브론_2019.txt
melo_2018.log melo_2019_01.log
Wade_2018.bak Wade_2019_02.jpg
모든 파일에는 "_" 구분 기호가 있으며 접두사에 따라 파일을 다른 새 디렉터리에 복사하고 싶습니다. 예를 들어
lebron_2018.txt lebron_2019.txt는 \backup\lebron에 복사됩니다.
melo_2018.log melo_2019_01.log가 \backup\melo에 복사됩니다.
wade_2018.bak wade_2019_02.jpg는 \backup\wade에 복사됩니다.
cp lebron*.* \backup\lebron을 통해 수행할 수 있습니다. 그런데 파일명을 검색해서 파일명을 기준으로 폴더에 자동으로 복사할 수 있을까요?
답변1
@AdminBee 링크된 게시물에는 좋은 아이디어가 많이 있지만 glob
사용할 수 있는 각 패턴에 대해 루프를 수행하는 것만으로도 옳다고 느껴집니다.
공백이 없다고 가정:
for f in $(ls *_*.txt | cut -d_ -f1 | uniq); do
mkdir -p ./backup/$f;
cp $f_*.txt ./backup/$f/;
done
답변2
*nix 시스템의 경우 슬래시 방향이 잘못되었습니다. 파일 이름에 공백이나 이상한 문자가 없으면 정상적으로 작동합니다.
for FILE in *_*.txt ; do
DIR="/backup/${FILE//_*}"
mkdir -p "${DIR}" || continue
mv "${FILE}" "${DIR}"
done
bash 변수 확장을 사용하여 파일에서 이름을 제거하여 디렉터리를 만듭니다. 데이터 손실을 방지하기 위해 디렉터리를 만들 수 없는 항목을 건너뛰어 안전하게 유지하세요.