加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash – 在同一文件夹终端脚本中复制具有相同名称的多个文件

发布时间:2020-12-15 21:54:07 所属栏目:安全 来源:网络整理
导读:我有很多名为相同的文件,目录结构(简化)如下: ../foo1/bar1/dir/file_1.ps ../foo1/bar2/dir/file_1.ps ../foo2/bar1/dir/file_1.ps .... and many more 因为查看所有这些ps文件是非常低效的 各自的目录,我想将它们全部复制到另一个目录中,但包括 中的前两
我有很多名为相同的文件,目录结构(简化)如下:

../foo1/bar1/dir/file_1.ps  
 ../foo1/bar2/dir/file_1.ps  
 ../foo2/bar1/dir/file_1.ps
 .... and many more

因为查看所有这些ps文件是非常低效的
各自的目录,我想将它们全部复制到另一个目录中,但包括
中的前两个目录的名称(与我的目的相关)
文件名.

我以前尝试过这样,但我无法从哪里获取哪个文件,因为它们
都是连续命名的:

#!/bin/bash -xv

cp -v --backup=numbered {} */*/dir/file* ../plots/;

其中../plots是我复制它们的文件夹.但是,它们现在的格式为file.ps.~x~(x是一个数字),所以我摆脱了“.ps.?*?”并只留下ps扩展名:

rename 's/.ps.~*~//g' *;
rename 's/~/.ps/g' *;

然后,由于ps文件有时会有数百个点并且需要很长时间才能打开,我只需将它们转换为jpg.

for file in * ; do convert -density 150 -quality 70 "$file" "${file/.ps/}".jpg; done;

这不是一个真正有效的bash脚本,因为我必须手动更改目录.

我想最好的方法是从名称开头复制文件
包含在复制文件名中的前两个目录.

我怎么能做到这一点呢?

解决方法

如果您只有两个级别的目录,则可以使用

for file in */*/*.ps
do 
    ln "$file" "${file////_}"
done

这遍历每个ps文件,并将它们硬链接到当前目录,并将/ s替换为_.如果您打算编辑文件但不想更新原件,请使用cp而不是ln.

对于任意目录级别,您可以使用特定于bash的

shopt -s globstar
for file in **/*.ps
do 
    ln "$file" "${file////_}"
done

但是你确定需要将它们全部复制到一个目录吗?您可以使用阅读器* / * / *.ps打开它们,这取决于您的阅读器可以让它们一个接一个地浏览它们,同时仍然可以看到完整的路径.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读