패턴이 있는 파일을 다른 폴더에 복사

패턴이 있는 파일을 다른 폴더에 복사

디렉토리에는 다음 파일이 있습니다.

르브론_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 변수 확장을 사용하여 파일에서 이름을 제거하여 디렉터리를 만듭니다. 데이터 손실을 방지하기 위해 디렉터리를 만들 수 없는 항목을 건너뛰어 안전하게 유지하세요.

관련 정보