저는 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