如何在UNIX中搜索数百个文件中的少数文件,如果找不到,则替换为0字节文件
我需要一个shell脚本来搜索和替换文件。详情如下。Pl帮助如何在UNIX中搜索数百个文件中的少数文件,如果找不到,则替换为0字节文件,unix,Unix,我需要一个shell脚本来搜索和替换文件。详情如下。Pl帮助 基本上每天我都会把一些文件放到我的目录中,就像下面我得到的100个文件一样 所有回复_11003_6_20_2013.txt 所有回复_11004_6_20_2013.txt 所有回复_11005_6_20_2013.txt 所有回复_11006_6_20_2013.txt 所有回复_11007_6_20_2013.txt 所有回复_11008_6_20_2013.txt 所有回复_11009_6_20_2013.txt 所有回复_1
提前感谢假设shell的意思是bash: 首先是骨架:
luk32:~/projects/tests$ cat ./process_files.sh
#!/bin/bash
DEST=./copies
for num in "$@"; do
file="AllResponses_"$num"_6_20_2013.txt"
if [ -f $file ]; then
cp $file $DEST
else
touch $DEST/$file
fi
done;
它将数字作为参数,然后尝试在当前工作目录中查找具有给定模式的文件。如果找到“复制到目标文件夹”,则触摸文件。
与硬编码的日期处理相比,您可能需要稍加修改才能变得更友好
例如:
luk32:~/projects/tests$ ls -l
total 40116
-rw-r--r-- 1 luk32 luk32 4 cze 21 11:33 AllResponses_1_6_20_2013.txt
-rw-r--r-- 1 luk32 luk32 5 cze 21 11:33 AllResponses_3_6_20_2013.txt
-rw-r--r-- 1 luk32 luk32 0 cze 21 11:32 AllResponses_4_6_20_2013.txt
luk32:~/projects/tests$ ls -l ./copies/
total 0
luk32:~/projects/tests$ ./process_files.sh 1 2 3 4
luk32:~/projects/tests$ ls -l ./copies/
total 8
-rw-r--r-- 1 luk32 luk32 4 cze 21 11:35 AllResponses_1_6_20_2013.txt
-rw-r--r-- 1 luk32 luk32 0 cze 21 11:35 AllResponses_2_6_20_2013.txt
-rw-r--r-- 1 luk32 luk32 5 cze 21 11:35 AllResponses_3_6_20_2013.txt
-rw-r--r-- 1 luk32 luk32 0 cze 21 11:35 AllResponses_4_6_20_2013.txt
谢谢…但还有一个帮助…但是如何在for循环中的成百上千个数字(如11003到11100)中将num传递为1100311004110051100611007。您需要更具体一些,是否始终需要一个范围<代码>序列11003 11050将生成范围。查看
man-seq
。你需要弄清楚如何得到这些数字,因为它更复杂。你可以这样做,/process\u files.sh{11003..11100}
我通常会这样做/process\u files.sh`seq 1100
`但我想这只是一种不同的语法。如果在`cmd`
中嵌入一个命令,它将被扩展为一个字符串,并在此处显示。因此,通常seq
会生成数字,但在此上下文中,它的输出将作为命令行参数。。我的意思是它的输出将被放置在它的位置上。我经常将它与ls
和seq
一起使用。比如/do\u magic\u to.sh`ls AllResponses*`
。