我对 Linux 中的 shell 脚本非常陌生。
我在 source 中有一堆文件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