在一个文件夹里面我有一些文件
UEDP01_20120821.csv
UEDP02_20120821.csv
UEDP03_20120821.csv
UEDP04_20120821.csv
UEDP05_20120821.csv
只想检查所有文件是否存在。如果缺少任何一个文件,则需要创建一个具有相同名称的空文件。
例如:
UEDP01_20120821.csv
UEDP02_20120821.csv
UEDP04_20120821.csv
UEDP05_20120821.csv
UEDP03_20120821.csv 如果此文件丢失,则需要创建相同的文件。
答案 0 :(得分:5)
如果file.txt
是您的文件列表,请使用bash:
while read fname; do
[[ -f $fname ]] || touch "$fname"
done < file.txt
答案 1 :(得分:4)
为什么你需要一个脚本呢?
正如dennis建议你可以使用-a来改变现有文件的访问时间。
touch -a UEDP0{1..5}_20120821.csv
将直接创建丢失的文件。
答案 2 :(得分:2)
Shell脚本: -
for i in {1..5}
do
file="UEDP0${i}_20120821.csv"
if [ -f $file ]
then
echo the file exists
else
>$file
fi
done
答案 3 :(得分:1)
如果您的文件列表动态更改,那么您可以在另一个文件中包含一个文件列表,这样可以更轻松:
如果您的文件位于名为list
的文件中,则:
list
将包含以下内容:
UEDP01_20120821.csv
UEDP02_20120821.csv
UEDP03_20120821.csv
UEDP04_20120821.csv
UEDP05_20120821.csv
awk 'system("touch "$1"");' list
如果文件不存在,会创建文件。
答案 4 :(得分:0)
只需打开输出文件即可为您创建。
您没有说明您的文件名列表来自何处,但在下面的程序中我对其进行了硬编码。
请注意,不需要关闭文件句柄$fh
,因为当变量在循环的每个循环结束时超出范围时,Perl会自动关闭它。
-e
operator将检查文件是否存在。或者,您可以使用-f
,如果节点存在且不是目录,则为true。如果已存在同名目录,则open
将失败
use strict;
use warnings;
my @files = qw/
UEDP01_20120821.csv
UEDP02_20120821.csv
UEDP03_20120821.csv
UEDP04_20120821.csv
UEDP05_20120821.csv
/;
for my $file (@files) {
open my $fh, '>', $file or die $! unless -e $file;
}
<强>更新强>
根据Bill Ruppert的建议,您可能更喜欢打开要追加的文件,无论它们是否存在。这将在必要时创建文件,但如果它们已经存在则保持原样
use strict;
use warnings;
my @files = qw/
UEDP01_20120821.csv
UEDP02_20120821.csv
UEDP03_20120821.csv
UEDP04_20120821.csv
UEDP05_20120821.csv
/;
open my $fh, '>>', $_ or die $! for @files;
答案 5 :(得分:0)
这个怎么样?检查是否存在名称的常规文件。如果没有,请创建它。
#!/usr/bin/perl
use strict;
use warnings;
my @files = qw(
UEDP01_20120821.csv
UEDP02_20120821.csv
UEDP03_20120821.csv
UEDP04_20120821.csv
UEDP05_20120821.csv
);
for my $file (@files) {
next if -f $file;
open my $fh, '>', $file or die $!;
}