【发布时间】:2016-06-13 00:29:48
【问题描述】:
我正在编写一个脚本来处理 20 个文件。它们都位于不同的目录中。我有部分文件名。
- 在日志目录中,File1_Date_time.err 更改为 File1__Date_time_orig.err
- cd ../scripts/
- 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: 无法移动 /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
-
顺便说一句,
sh foo.sh非常危险,除非您绝对确定该脚本以#!/bin/sh而不是#!/bin/bash、#!/bin/ksh、@987654333 开头@, 等等;否则,它可能会使用错误的解释器。