폴더 이름에 파일 이름이 포함된 경우 파일을 이동하는 방법

폴더 이름에 파일 이름이 포함된 경우 파일을 이동하는 방법

저는 Linux에서 쉘 스크립팅을 처음 접했습니다.

소스에 많은 파일이 있습니다 directory. directory폴더에 파일 이름(정확히 일치하지 않음)이 포함되어야 하는 대상 으로 파일을 이동해야 합니다 .

전임자: 내 소스 디렉토리

/var/backup/
logstash-avi-core.spec
logstash-core.spec
ftpcore.spec

내 대상 디렉토리

/path
/logstash-avi-core-2.2.0
/logstash-core-2.1.1
/ftpcore.spec-2.0

참조를 기반으로 스크립트를 작성했지만 스크립트가 작동하지 않습니다. 파일이 대상 디렉터리에 복사되지 않았습니다.

for path in /var/backup/${1}
do
    if [ -f "${path}" ]
    then
        filename="$(<<< "${file}" awk -F'.')"
        if [ -n "${filename}" ]
        then
            cp "${path}" "/path/${1}/"
        fi
    fi
done

미리 감사드립니다

의견의 설명을 기반으로 업데이트:"/path/${1}/"cp "${path}" "/path/${1}/"에서 대상 디렉터리를 언급했습니다. 소스 디렉터리에서 파일 이름을 읽고 파일 이름이 포함된 폴더 이름을 검색해야 하며 파일을 일치하는 폴더로 이동해야 합니다. 이것이 나의 요청입니다.

업데이트 2 파일명과 디렉토리명을 변경했습니다.

답변1

내가 올바르게 이해했다면 각 파일 이름의 첫 번째 문자를 문자가 아닌 첫 번째 문자까지 가져와서 대상 디렉터리의 첫 번째 문자까지 첫 번째 문자까지 일치시키려는 것입니다 _. 각 패턴은 다음과 같이 가정합니다. , 다음을 수행할 수 있습니다.

for file in /var/backup/*; do 
    fname=${file##*/}; 
    fname=${fname/.*/}; 
    cp -v "$file" /path/"$fname"*/; 
done

결과 :

$ ls /path/*
/path/adbs_32:
adbs.spec

/path/dmsx_ty_32:
dmsx.spec

/path/fomru_ts_td-45:
fomru32.spec

/path/gend_monitor:
gend.spec

관련 정보