1

在一个文件夹中,我有一些文件

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

UDP03_20120821.csv如果缺少此文件,则需要创建相同的文件。

4

6 回答 6

5

如果file.txt是您的文件列表,在 bash 中:

while read fname; do
    [[ -f $fname ]] || touch "$fname"
done < file.txt
于 2012-08-23T12:29:49.113 回答
4

为什么你需要一个脚本呢?

正如 dennis 建议的那样,您可以使用 -a 来更改现有文件的访问时间。

  touch -a UEDP0{1..5}_20120821.csv

将直接创建丢失的文件。

于 2012-08-23T11:08:51.630 回答
2

外壳脚本:-

for i in {1..5}
do
file="UEDP0${i}_20120821.csv"
if [ -f $file ]
then
    echo the file exists
else
 >$file
fi
done
于 2012-08-23T10:48:16.207 回答
1

如果您的文件列表动态更改,那么您可以在另一个文件中拥有一个文件列表,这样会更容易:

如果您将文件放在名为listthen 的文件中:

list将有以下内容:

  UEDP01_20120821.csv
  UEDP02_20120821.csv
  UEDP03_20120821.csv
  UEDP04_20120821.csv
  UEDP05_20120821.csv

awk 'system("touch "$1"");' list

如果文件不存在,将创建文件。

于 2012-08-23T10:53:24.407 回答
0

只需打开一个文件进行输出即可为您创建它。

你没有说你的文件名列表来自哪里,但是在下面的程序中我已经硬编码了它。

请注意,没有必要关闭文件句柄$fh,因为当变量在循环的每个循环结束时超出范围时,Perl 会自动关闭它。

-e操作员将检查文件是否存在。-f或者,如果节点存在且不是目录,您可以使用which is 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;
于 2012-08-23T10:44:07.993 回答
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 $!;
}
于 2012-08-23T10:45:53.890 回答