>我有这种情况,我需要检查保存文件以供迁移的文件夹中的文件名。
如果文件名与我们建议客户端提供的名称不匹配,然后将其移动到坏文件夹。此外,同一文件夹中可能有多个文件,因此我只需要选择与我正在寻找的字符串不匹配的文件。
我有这件作品,如果文件名正确,可以打电话给我
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个不正确的文件时,如果只有一个或一个不正确的文件,那么它就可以完美地工作!