代码之家  ›  专栏  ›  技术社区  ›  Václav Struhár

unix联机连接文件列表

  •  -2
  • Václav Struhár  · 技术社区  · 7 年前

    file1 
    file2 
    file3
    

    file1 OR file2 OR file3

    还是我需要为它写一个脚本?

    5 回复  |  直到 7 年前
        1
  •  2
  •   anubhava    7 年前

    您可以使用此功能打印所有文件名(包括带有空格、换行符或特殊字符的文件名) " OR " as分离器( 假设文件名不包含ASCII代码 4 ):

    orfiles() {
       local IFS=$'\4'
       local out="$*"
       echo "${out//$'\4'/ OR }"
    }
    

    然后将其称为:

    orfiles *
    

    工作原理:

    1. 我们设置 IFS 4. 函数内部局部
    2. 我们存储输出 "$*" out \4 在变量中的每个文件名之后 $out .
    3. 最后使用BASH字符串替换全局替换 “或” 打印输出时 $out

    在Unix系统中 国际单项体育联合会 “或” 如上图所示,我们需要分两个步骤来完成。

        2
  •  1
  •   Chen A.    7 年前

    你可以简单地用

    printf '%s OR ' $(ls -1 *) | sed 's/OR $/''/'; echo -e '\n'
    

    哪里 ls -1 *

        3
  •  1
  •   RomanPerekhrest    7 年前


    使用以下内容 ls + awk公司 解决方案:

    ls -1 * | awk '{ r=(r)? r" OR "$0 : $0 }END{ print r }'
    

    带换行符的文件名的解决方法:

    echo -e $(ls -1b hello* | awk -v RS= '{gsub(/\n/," OR ",$0); gsub(/\\ /," ",$0); print $0}')
    
    • -b ls 为非图形字符打印C样式转义的选项
        4
  •  0
  •   Kent    7 年前
    ls -1|awk -v q='"' '{printf "%s%s", NR==1?"":" OR ", q $0 q}END{print ""}'
    

    ls&awk方法,例如文件名包含空格:

    kent$  ls -1
    file1
    file2
    'file with OR and space'
    
    kent$  ls -1|awk -v q='"' '{printf "%s%s", NR==1?"":" OR ", q $0 q}END{print ""}'
    "file1" OR "file2" OR "file with OR and space"
    
        5
  •  0
  •   Ed Morton    7 年前
    $ for f in *; do printf '%s%s' "$s" "$f"; s=" OR "; done; printf '\n'
    file1 OR file2 OR file3