【问题标题】:In Linux, how to copy all the files not starting with a given string?在 Linux 中,如何复制所有不以给定字符串开头的文件?
【发布时间】:2011-01-12 14:24:54
【问题描述】:

我尝试了以下命令:

cp src_folder/[!String]* dest_folder

但是,此命令将复制所有不以任何字符 'S'、't'、'r'、'i'、'n'、'g' 开头的文件,而不是复制那些不要以“字符串”开头。

【问题讨论】:

标签: regex linux unix cp


【解决方案1】:

康拉德答案的变体,使用cp 选项-t 指定目标目录简化了最后一个命令。它创建一个cp 进程来复制所有文件。

ls src_folder | grep -v '^String' | xargs cp -t dest_folder
  • 列出src_folder中的所有文件
  • 过滤掉所有以String开头的
  • 将所有剩余文件复制到dest_dir

【讨论】:

    【解决方案2】:

    在 bash 中:

    shopt -s extglob
    cp src_folder/!(String*) dest_folder
    

    【讨论】:

    • @Joel:在 bash 中启用扩展通配符。
    【解决方案3】:
    ls src_folder | grep -v '^String' | xargs -J % -n1 cp % dest_folder
    

    这会

    • 列出src_folder中的所有文件
    • 过滤掉所有以String 开头的内容(留下其余部分)
    • 调用cp 命令
      • 每个文件一次(-n1 表示分别为每个文件调用cp
      • 使用% dest_folder 作为其参数,其中% 被实际文件名替换。

    【讨论】:

    • 我的xargs(Debian 测试)没有-J 选项。你的意思是-I
    • @maxelost:我使用的是 OS X 的 BSD 版本。选项 -I 做了其他事情。所有发行版在其 POSIX 工具上都有不同的开关,这很糟糕。 :-( 标准化太多了。
    【解决方案4】:
    cp src_folder/!(String*) dest_folder
    

    试试看 〜克里斯

    【讨论】:

    • 我收到一条错误消息:意外标记附近出现语法错误`('
    • 出于某种原因,它对我有用。尝试 Ignacio 发布的命令(在我上面的答案中调整 - 你不需要 shopt -s extglob)
    猜你喜欢
    • 2011-05-01
    • 1970-01-01
    • 2013-08-29
    • 1970-01-01
    • 1970-01-01
    • 2011-02-16
    • 2014-08-23
    • 1970-01-01
    • 2014-02-17
    相关资源
    最近更新 更多