如果文件名不正确,请将其移至错误文件夹

时间:2016-02-25 06:43:53

标签: linux shell unix sh

我有这种情况,我需要在保存文件以进行迁移的文件夹中检查文件名。

如果文件名与名称不匹配,我们建议客户提供,然后将其移至坏文件夹。 此外,同一文件夹中可能有多个文件,因此我只需要选择与我正在寻找的字符串不匹配的文件。

如果文件名正确无误,我有这件可以打电话给我的文件

if [ ! -f /data/cmts_map_*.csv ]; 
then
  echo "File not found"
fi  

但现在我陷入困境,假设有文件夹数据

    data]$cs_map_13672.csv
         dhcp_map_5485.csv
         link_map_875485.csv

所以在数据文件夹中我有3个文件,其中第一个文件名不正确,其余两个是正确的。 所以不正确的文件应该移动到坏文件夹我只能识别并打印一条消息,但是如果只选择第一个要移动的文件就会卡住。

此外,我还有每个文件的thre块来处理迁移,如此

FILE=`ls ./data/cmts_map_*.csv`
FILE_CMTS=$(basename $FILE)
mv ./data/$FILE_CMTS ./data/cmts_data.csv

FILE=`ls ./data/dhcp_map_*.csv`
FILE_DHCP=$(basename $FILE)
mv ./data/$FILE_DHCP ./data/dhcp_data.csv

FILE=`ls ./data/*_link_*.csv`
FILE_LINK=$(basename $FILE)
mv ./data/$FILE_LINK ./data/link_data.csv

所以这是我原始脚本的一小部分,我正在检查文件名并重命名它们。

我想添加

if [ ! -f /data/cmts_map_*.csv ]; 
then
  echo "File not found"
  mv ?
fi 
FILE=`ls ./data/cmts_map_*.csv`
FILE_CMTS=$(basename $FILE)
mv ./data/$FILE_CMTS ./data/cmts_data.csv

因为我们不确定错误的名字可能是什么!

如果需要更多信息,请与我们联系。

2 个答案:

答案 0 :(得分:1)

我建议你使用find:

find . -type f -not -name 'cmts_map_*.csv' -exec mv -t ./badfolder/ {} \+

更新:

要移动与父/ badfolder / dir中三种模式之一匹配的文件,并为每个文件添加.bad扩展名:

find . -type f ! -name 'dhcp_map_*.csv' ! -name 'cmts_map_*.csv' ! -name '*_link_*.csv' -exec mv '{}' ../badfolder/'{}'.bad \;

答案 1 :(得分:0)

Bad File Found please check bad folder
mv: missing destination file operand after `../bad/.bad'
Try `mv --help' for more information.
/home/vmsow03qa/domains/vm/tools/topology_data_load/data
basename: extra operand `./cts_map_0309151623_1.csv'
Try `basename --help' for more information.

这样我可以将不正确的fime移动到坏文件夹但是当我把所有三个文件都用不正确的名称时我又遇到一个问题然后它给我一个像----的错误

jan_1,feb_1,jan_2,feb_2

Anu猜测只有当有3个不正确的文件时才会发生,如果只有一个不正确的文件,那么它就完美了!