我正在编写一个脚本来处理20个文件。 它们全部位于不同的目录中。 我有部分文件名。

在日志目录中,File1_Date_time.err更改为File1__Date_time_orig.err

cd ../scripts/

sh File.sh

File1目录为/data/data1directory/Sample_File1/logs/File1_Data_time.err

File2目录为/data/data2directory/Sample_File2/logs/File2_Data_time.err

.....

我的脚本看起来像这样。 (runrunrun.sh)

#!/bin/bash

INPUT=$1

mv /data/*/Sample_*/logs/*_Data_time.err /data/*/Sample_*/logs/*_Data_time_orig.err

cp /data/*/Sample_*/scripts/*.sh /data/*/Sample_*/scripts/*_orig.sh

sh /data/*/Sample_*/scripts/*_orig.sh

运行时,我尝试过。

./runrunrun.sh File1

。 runrunrun.sh File1

sh runrunrun.sh File1

mv:无法移动/data/data1directory/Sample_File1/logs/File1_Data_time.err /data/*/Sample_*/logs/*_Data_time_orig.err:无此类文件或目录

cp也得到了类似的反馈

我做对了吗?

谢谢!

mv,cp等。如果这些通配符具有任何有效的扩展名,则不会通过通配符。 相反,它们传递了通过运行这些扩展创建的原义文件名。 因此,由于他们不知道输入名称中使用的文字通配符,因此他们可能无法将输入名称中的*映射到输出名称中的*。

如果您想编写重命名工具,那么一个不错的起点是BashFAQ#30:mywiki.wooledge.org/BashFAQ/030

相关:stackoverflow.com/questions/20629302/

顺便说一句,sh foo.sh非常危险,除非您完全确定该脚本以#!binsh而不是#!binbash,#!binksh,#!binzsh等开头; 否则,可能使用了错误的解释器。

让我们谈论通配符如何工作一分钟。

cp *.txt foo

如果存在与该glob匹配的文件,则实际上不使用参数*.txt调用cp。相反,它运行如下所示的内容:

cp a.txt b.txt c.txt foo

同样,类似

mv *.txt *.old

...可能不知道该怎么办,因为调用它时,所看到的是:

mv a.txt b.txt c.txt *.old

或者更糟糕的是,如果您已经有一个名为z.old的文件,它将看到:

mv a.txt b.txt c.txt z.old

因此,您需要使用其他工具。考虑:

# REPLACES: mv /data/*/Sample_*/logs/*_Data_time.err /data/*/Sample_*/logs/*_Data_time_orig.err

for f in /data/*/Sample_*/logs/*_Data_time.err; do

mv"$f""${f%_Data_time.err}_Data_time_orig.err"

done

# REPLACES: cp /data/*/Sample_*/scripts/*.sh /data/*/Sample_*/scripts/*_orig.sh

for f in /data/*/Sample_*/scripts/*.sh; do

cp"$f""${f%.sh}_orig.sh"

done

# REPLACES: sh /data/*/Sample_*/scripts/*_orig.sh

for f in /data/*/Sample_*/scripts/*_orig.sh; do

if [[ -e"$f" ]]; then

# honor the script's shebang and let it choose an interpreter to use

"$f"

else

# script is not executable, assume POSIX sh (not bash, ksh, etc)

sh"$f"

fi

done

这使用了参数扩展来去除旧名称的末尾,然后再添加新名称名称。

在想要对通配符(或更复杂的)文件名匹配执行操作的简单情况下,可以非常简洁地使用find命令。以下技术可以用于内存...几乎!

通过让find命令在找到的每个文件名上运行另一个命令来起作用。您可以使用echo代替mv空运行此示例。

如果我们想将当前目录中所有以" report"开头的文件移动到另一个并行目录" reports":

find . -name"report*.*" -exec mv '{}' ../reports/ \;

通配符字符串必须用引号引起来,标记"找到"的文件名的{}必须用引号引起来,并且必须转义最后的分号-所有这些都是由于对这些字符进行了Bash / shell处理。

请查看find的手册页以了解更多用途:https://linux.die.net/man/1/find

尝试这个:

更改这些:

zc_cd_delim_01.csv

zc_cd_delim_04.csv

这些:

zc_cd_delim_113_01.csv

zc_cd_delim_113_04.csv

命令行:

for f in zc_cd_delim_??.csv; do var1=${f%%??.*};

mv $f"${var1}113_${f#$var1}";

done

mv"$f"相反,如果??与带有空格的文件名匹配,或者IFS包含在名称中找到的字符(即_),则行为可能令人惊讶。

顺便说一句,我不太清楚这如何适用于当前的问题-c_cd_delim_??.csv在我看来并不像OP所使用的一种模式作为他们想要匹配的示例。 您介意进行编辑以使该问题的适用性更加清楚吗?

linux cp命令 通配符,关于shell:cp和mv中的Linux通配符用法相关推荐

  1. Linux ulimit命令(控制shell执行程序的资源、并发)

    Linux ulimit命令用于控制shell程序的资源. ulimit为shell内建指令,可用来控制shell执行程序的资源. 语法 ulimit [-aHS][-c <core文件上限&g ...

  2. Linux常用命令学习(shell 脚本)

    1.ls命令 ls -a # 列出目录所有文件,包含以.开始的隐藏文件 ls -A # 列出除.及..的其它文件 ls -r # 反序排列 ls -t # 以文件修改时间排序 ls -S # 以文件大 ...

  3. window命令行 linux,Windows命令行:起源 直到引入Windows下的linux子系统(WSL)

    本文从Windows命令行的起源及终端的演变,到我们在未来Windows发行版中对Windows控制台及命令行进行全面更新,引入Windows下的linux子系统(WSL).在本文中,我们将对命令行最 ...

  4. linux系统在硬盘上安装程序,在硬盘中安装Linux操作系统最简单的方法

    通过Grub(多系统引导管理器)来安装 本人最近摸索Linux系统,想在本机上安装双系统,但我这老爷机上没有软驱,没有刻录机,下载的ISO文件只能存在硬盘上,也只能通过硬盘来安装,在各大Linux的B ...

  5. 物理机linux无法上网,物理机不能访问虚拟机VMNet8中的Linux

    将虚拟机部署到NAT网络指定上网使用的物理网卡 配置Linux虚拟机通过NAT访问Internet 虚拟机NAT不能上网 物理机不能访问虚拟机VMNet8中的Linux 修改虚拟机的MAC地址 安装完 ...

  6. 工作中 linux 常用命令:vi、cp、mv、rm、kill、curl、tail

    centos7 关闭防火墙: 1.firewalld的基本使用 启动: systemctl start firewalld 关闭: systemctl stop firewalld 查看状态: sys ...

  7. Linux命令行与shell脚本编程大全学习(linux命令行部分)

    第一章 初识Linux shell 第二章 走进shell 第三章 基本的bash shell命令 cd pwd:显示出shell当前目录 ls -F -R -l *和?和[ ]和[ a - i ]和 ...

  8. Linux常用命令(第二版) --Shell应用技巧

    Shell应用技巧 小技巧: 1.命令补全功能: <Tab>键 2.清屏: Ctrl+l 3.删除光标前所有内容: Ctrl+u 4.命令历史记录: history 这时:  !histo ...

  9. linux多点触控软件测试,测试工程师日常工作中高频Linux命令

    最近,一直在整理Linux这块的命令 . 出发点,是在浩瀚的Linux命令和每个命令众多的参数中,挑选出一些高频的场景和命令 .加速测试从业者学习效率 &  学习精准度 . 花最少的时间,学到 ...

最新文章

  1. Visual Studio下包含多项目的解决方案及项目间引用
  2. 前言、Python是真的火,还是炒得火?来看看它的前世和发展
  3. IO-BufferedInputStream
  4. z变换解差分方程例题_某些常见微分方程的一般解法(工具向)
  5. 移动端ios和安卓input问题
  6. [论文阅读] AMPNet: Average- and Max-Pool Networks for Salient Object Detection
  7. 打印十字图-蓝桥杯历届试题
  8. matlab结果导入ug,matlab与UG数据交换.docx
  9. 使用python抓取天涯帖子,并实现“只看楼主”功能
  10. 事业单位资产管理系统解决方案:国有资产全生命周期管理监管体系
  11. 实验一:VLAN实验
  12. 看完《一九四二》的感受--也写给正在找工作时迷茫的你
  13. Kettle笔记 —— 利用Transformation和job完成不同数据源的数据处理和写入
  14. TCP基于窗口的端到端的拥塞控制机制
  15. 支持多种视频格式的html网页视频播放器代码
  16. Ubuntu系统切换五笔输入法
  17. 看完李宏毅的视频我决定学好英语了
  18. windows10系统提示不允许使用你正在尝试的登录方式,请联系网络管理员了解详细信息
  19. QQ登录获取unionID
  20. Lesson 2 Thirteen equals one

热门文章

  1. 【C语言篇】C预处理器和C库
  2. android京东商城一级分类到二级分类的滑动效果,Android仿京东分类模块左侧分类条目效果...
  3. AutoCAD缺少字体怎么办?(如找不到指定字体,显示不出)
  4. 【JavaSE】JavaSE入门--初识Java
  5. TracePro | 建立物体
  6. 模式识别 计算机博弈,计算机博弈新题材
  7. 利用单级栅电压驱动IGBT
  8. 永洪Bi架构部署与集群部署
  9. 振动室市场深度研究分析报告
  10. Centos7配置阿里云镜像源的教程