如果文件名不正确,则将其移动到坏文件夹



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

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

我有这件作品,如果文件名正确,可以打电话给我

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 个文件,其中第一个文件名不正确,其余两个是正确的。因此,不正确的文件应该移动到坏文件夹,我只能为此识别和打印消息,但卡住了,例如如何选择要移动的第一个文件。

此外,我为每个文件提供了三个块来处理这样的迁移

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

因为我们不确定不正确的名字可能是任何!

如果需要更多信息,请告诉我。

我建议你使用查找:

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 ;
if [ ! -f /data/cmts_dhcp_link_map_*.csv ]; 
then
cd data
curr=`pwd`
echo $curr
bad_file=`find . -type f -not -name 'dhcp_map_*.csv' -a -type f -not -name 'cmts_map_*csv' -a -type f -not -name 'cmts_dhcp_link_map_*.csv'`
BAD_FILE_LINK=$(basename "$bad_file")
echo $BAD_FILE_LINK
echo "Bad File Found please check bad folder"
mv $BAD_FILE_LINK ../bad/$BAD_FILE_LINK.bad
fi
cd ..
if [ ! -f dhcp_map_*.csv ]; 
then
cd data
curr=`pwd`
echo $curr
bad_file=`find . -type f -not -name 'dhcp_map_*.csv' -a -type f -not -name 'cmts_map_*csv' -a -type f -not -name 'cmts_dhcp_link_map_*.csv'`
BAD_FILE_DHCP=$(basename "$bad_file")
echo $BAD_FILE_DHCP
echo "Bad File Found please check bad folder"
mv $BAD_FILE_DHCP ../bad/$BAD_FILE_DHCP.bad
fi
cd ..
if [ ! -f cmts_map_*csv ]; 
then
cd data
curr=`pwd`
echo $curr
bad_file=`find . -type f -not -name 'dhcp_map_*.csv' -a -type f -not -name 'cmts_map_*csv' -a -type f -not -name 'cmts_dhcp_link_map_*.csv'`
BAD_FILE_CMTS=$(basename "$bad_file")
echo $BAD_FILE_CMTS
echo "Bad File Found please check bad folder"
mv $BAD_FILE_CMTS ../bad/$BAD_FILE_CMTS.bad
fi
cd ..

这样我就可以将不正确的 fime 移动到坏文件夹中,但是当我将所有三个文件都放入名称不正确时,我再次遇到问题,然后它给了我错误,例如----

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.

Anu猜它只发生在有3个不正确的文件时,如果只有一个或一个不正确的文件,那么它就可以完美地工作!

最新更新