Bash unix shell脚本-在if条件下使用mv命令
我想根据文件扩展名将文件移动到文件夹中。 示例:如果文件为.csv,则应移动到“已完成”文件夹,如果文件具有任何扩展名(其他任何.csv),则应移动到“常规”文件夹 下面是我的shell脚本,它不工作。你能告诉我它有什么问题吗Bash unix shell脚本-在if条件下使用mv命令,bash,unix,Bash,Unix,我想根据文件扩展名将文件移动到文件夹中。 示例:如果文件为.csv,则应移动到“已完成”文件夹,如果文件具有任何扩展名(其他任何.csv),则应移动到“常规”文件夹 下面是我的shell脚本,它不工作。你能告诉我它有什么问题吗 #!/bin/bash cd /apps/int/apd/$1/work if ls /apps/int/apd/$1/work/*.csv &> /dev/null; then mv *.csv /apps/int/apd/$1/COMPLETE
#!/bin/bash
cd /apps/int/apd/$1/work
if ls /apps/int/apd/$1/work/*.csv &> /dev/null; then
mv *.csv /apps/int/apd/$1/COMPLETED
else
/apps/int/apd/$1/Regular
fi
为什么必须检查
*.csv
文件的存在
#!/bin/bash
cd /apps/int/apd/$1/work
mv *.csv /apps/int/apd/$1/COMPLETED 2>/dev/null
mv * /apps/int/apd/$1/Regular
这里首先将.csv
文件移动到COMPLETED
文件夹。然后将其余文件移动到Regular
文件夹中
我假设您已经创建了
已完成的
和常规的
文件夹。为什么要检查*.csv
文件的存在
#!/bin/bash
cd /apps/int/apd/$1/work
mv *.csv /apps/int/apd/$1/COMPLETED 2>/dev/null
mv * /apps/int/apd/$1/Regular
这里首先将.csv
文件移动到COMPLETED
文件夹。然后将其余文件移动到Regular
文件夹中
我假设您已经创建了
COMPLETED
和Regular
文件夹。使用您的特定路径以及/COMPLETED/和/Regular/的路径更改您的路径
如果我得到了你想要解释的,我想你的变量看起来像theese:
/YOUR_PATH/ = /apps/int/apd/$1/work
/COMPLETED/ = /apps/int/apd/$1/COMPLETED
/REGULAR/ = /apps/int/apd/$1/Regular
你可以试试这个。:)
如果您需要什么,请留下评论。:) 使用您的特定路径以及/COMPLETED/和/REGULAR/的路径更改您的路径 如果我得到了你想要解释的,我想你的变量看起来像theese:
/YOUR_PATH/ = /apps/int/apd/$1/work
/COMPLETED/ = /apps/int/apd/$1/COMPLETED
/REGULAR/ = /apps/int/apd/$1/Regular
你可以试试这个。:)
如果您需要什么,请留下评论。:) 在调用
mv
之前检查csv文件允许您区分两种可能失败的方式mv
:无法移动字面上名为“*.csv”的文件和无法移动实际的csv文件。但是根据要求,我看到的是任何扩展名为的文件都应该被移动。因此,即使文件名字面上是“*.csv”,我想也应该移动它。不过,最有可能的是,没有名为*.csv
的文件,但这是shell传递给mv
的名称,这将导致mv
失败。由于您将错误消息静音以避免看到,因此您将不知道mv
是否存在其他问题,例如目录COMPLETED
不存在。最好测试您可以预测的错误条件,并显示您无法预测的错误的消息。一个可能的结果是,第一个mv
失败,然后所有文件都被移动到常规
。在调用mv
之前检查csv文件,允许您区分两种可能的失败方式mv
无法移动字面上命名为“*.csv”的文件,而且不能移动实际的csv文件。但是根据要求,我看到任何扩展名为.csv
的文件都应该被移动。因此,即使文件名字面上是“*.csv”,我想也应该移动它。不过,最有可能的是,没有名为*.csv
的文件,但这是shell传递给mv
的名称,这将导致mv
失败。由于您将错误消息静音以避免看到,因此您将不知道mv
是否存在其他问题,例如目录COMPLETED
不存在。最好测试您可以预测的错误条件,并显示您无法预测的错误的消息。一个可能的结果是第一个mv
失败,然后所有文件都被移动到常规
。