代码之家  ›  专栏  ›  技术社区  ›  Mike

需要检查文件是否在那里?

  •  1
  • Mike  · 技术社区  · 14 年前

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

    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 如果该文件丢失,则需要创建相同的文件。

    6 回复  |  直到 14 年前
        1
  •  5
  •   chepner    14 年前

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

    while read fname; do
        [[ -f $fname ]] || touch "$fname"
    done < file.txt
    
        2
  •  4
  •   Vijay    14 年前

    为什么你需要一个脚本?

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

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

    将直接创建丢失的文件。

        3
  •  2
  •   perilbrain    14 年前

    外壳脚本:-

    for i in {1..5}
    do
    file="UEDP0${i}_20120821.csv"
    if [ -f $file ]
    then
        echo the file exists
    else
     >$file
    fi
    done
    
        4
  •  1
  •   P.P    14 年前

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

    如果您的文件位于名为 list 那么:

    列表 将具有以下内容:

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

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

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

        5
  •  0
  •   TLP    14 年前

    这个怎么样?检查是否存在该名称的常规文件。如果没有,请创建它。

    #!/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 $!;
    }
    
        6
  •  0
  •   Borodin    14 年前

    只要打开一个文件进行输出,就会为您创建它。

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

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

    这个 -e operator 将检查文件是否存在。或者,您可以使用 -f 如果节点存在,则为真 不是目录 。如果已经存在同名目录,则 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;