在Linux中,如何复制不以给定字符串开头的所有文件?

时间:2011-01-12 14:24:54

标签: regex linux unix cp

我尝试使用以下命令:

cp src_folder/[!String]* dest_folder

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

4 个答案:

答案 0 :(得分:14)

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

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

答案 1 :(得分:5)

在bash中:

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

答案 2 :(得分:3)

ls src_folder | grep -v '^String' | xargs -J % -n1 cp % dest_folder

这将

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

答案 3 :(得分:1)

cp src_folder/!(String*) dest_folder

试试吧 〜克里斯