我正在编写一个Linux脚本来将文件从文件夹结构复制到一个文件夹中.我想使用不同的文件夹名称作为文件名的前缀.
我当前的脚本看起来像这样.但是,我似乎无法找到一种方法来使用通配符中的文件夹名称作为文件名;
for f in /usr/share/storage/*/log/myfile.log*; do cp "$f" /myhome/docs/log/myfile.log; done
>/usr/share/storage/100/log/myfile.log --> /myhome/docs/log/100.log
>/usr/share/storage/100/log/myfile.log.1 --> /myhome/docs/log/100.log.1
>/usr/share/storage/102/log/myfile.log --> /myhome/docs/log/102.log
>/usr/share/storage/103/log/myfile.log --> /myhome/docs/log/103.log
>/usr/share/storage/103/log/myfile.log.1 --> /myhome/docs/log/103.log.1
>/usr/share/storage/103/log/myfile.log.2 --> /myhome/docs/log/103.log.2
解决方法:
您可以使用正则表达式匹配来提取所需的组件,但是简单地更改为/usr/share / storage可能更容易,因此所需的组件始终是路径中的第一个组件.
一旦你这样做,使用各种参数扩展操作符来提取你想要使用的路径和文件名的部分是一件简单的事情.
cd /usr/share/storage
for f in */log/myfile.log*; do
pfx=${f%%/*} # 100, 102, etc
dest=$(basename "$f")
dest=$pfx.${dest#*.}
cp -- "$f" /myhome/docs/log/"$pfx.${dest#*.}"
done
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。