![폴더 이름에 파일 이름이 포함된 경우 파일을 이동하는 방법](https://linux55.com/image/87013/%ED%8F%B4%EB%8D%94%20%EC%9D%B4%EB%A6%84%EC%97%90%20%ED%8C%8C%EC%9D%BC%20%EC%9D%B4%EB%A6%84%EC%9D%B4%20%ED%8F%AC%ED%95%A8%EB%90%9C%20%EA%B2%BD%EC%9A%B0%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%EC%9D%B4%EB%8F%99%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95.png)
저는 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