如果文件夹名称包含文件名,如何移动文件

如果文件夹名称包含文件名,如何移动文件

我对 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

相关内容