我正在编写一个脚本来处理 20 个文件。它们都位于不同的目录中。我有部分文件名。
- 在日志目录中,File1_Date_time.err 更改为 File1__Date_time_orig.err
- cd ../脚本/
- sh 文件.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 文件1
. runrunrun.sh 文件 1
sh runrunrun.sh 文件 1
mv: cannot move /data/data1directory/Sample_File1/logs/File1_Data_time.err /data/*/Sample_*/logs/*_Data_time_orig.err
: No such file or directory cp也得到了类似的反馈
我做对了吗?
谢谢!
原文由 TJ Wu 发布,翻译遵循 CC BY-SA 4.0 许可协议
让我们讨论一下通配符是如何工作的。
如果存在与该 glob 匹配的任何文件,则实际上不会使用参数
*.txt
调用cp
。相反,它运行如下:同样,类似
…不可能知道该怎么做,因为当它被调用时,它看到的是:
或者,更糟糕的是,如果您已经 有 一个名为
z.old
的文件,它会看到:因此,您需要使用不同的工具。考虑:
这使用 参数扩展 在添加新名称之前去除旧名称的尾部。