【问题标题】:bash shell script copy first file with certain extension to current directorybash shell脚本将具有特定扩展名的第一个文件复制到当前目录
【发布时间】:2013-03-05 14:11:31
【问题描述】:

我有一个包含多个 .c 源文件的目录,我正在尝试在另一个目录中编写一个 shell 脚本,该脚本将从前一个目录中复制第一个 .c 文件,对其进行编译、运行和删除。现在我了解了如何编译、运行和删除文件,但是当目录中有多个具有相同扩展名的文件时,如何在不知道其名称的情况下只获取一个 .c 文件?

【问题讨论】:

    标签: bash shell


    【解决方案1】:

    一种方法是使用循环,然后在第一次迭代后中断:

    for f in dir/*.c; do
        cp "$f" .
        # compile
        # run
        # delete
        break
    done
    

    【讨论】:

    • 如果你先shopt -s nullglob,如果没有 .c 文件,就会跳过循环。
    【解决方案2】:

    假设您所说的“第一个”是指排序列表中的第一个文件。

    for 循环可以正常工作,但您也可以这样做:

    file=`ls -1 dir/*.c | head -1`
    # compile $file && run $file && delete $file
    

    【讨论】:

    • 我完全同意您的回复和您提到的文章。 但是,对于特定的用例,在受控环境中,它仍然可以工作。考虑风险是过程的一部分。
    【解决方案3】:

    在 bash 中你可以使用数组:

    files=(*.c)
    echo "compiling ${files[0]}"
    compile ${files[0]}
    

    【讨论】:

      【解决方案4】:

      您尚未指定如何定义“第一个”,但您可以为此使用set

      set -- source_dir/*.c
      cp "$1" .
      # ...
      rm "$1"
      

      【讨论】:

      • 在这里引用$1 可能是明智的。
      猜你喜欢
      • 2015-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-05
      • 2020-02-03
      • 2015-07-01
      • 1970-01-01
      • 2016-06-06
      相关资源
      最近更新 更多