移动不包含特定字符串的文件

时间:2019-05-28 06:20:07

标签: bash find mv

我想使用mv移动文件名中不包含字母S的文件。在mv手册中找不到任何内容。也许与findgrep组合?它必须区分大小写。

输入:

  file1
  fileS1
  file2
  fileS2

要移动的文件:

  file1
  file2

4 个答案:

答案 0 :(得分:2)

如果启用扩展的globing (默认情况下处于关闭状态),则无需任何其他软件即可在纯Bash中进行选择:

shopt -s extglob
mv !(*S*) /target/dir

有关更多信息,请在extglob手册页中搜索bash(1)(该信息位于第二个匹配项)。

答案 1 :(得分:1)

例如,您可以将find-not标志一起使用。

find /path/to/source/dir -type f -not -name '*S*' \
    | xargs mv -t /path/to/target/dir

答案 2 :(得分:1)

您还可以使用ls中的“忽略模式”开关,例如:

mv $(ls -I '*S*') /target/dir

答案 3 :(得分:0)

GREP-v标志也可以在这里使用。根据文档,

  

-v,--invert-match                 反转匹配感,选择不匹配的行。

只需使用

ls | grep -v '*S*' | xargs mv -t target_dir/

另外,请参见this帖子。