移动包含X但不包含Y的文件

时间:2014-08-13 05:27:29

标签: file unix find move

要管理我的备份同步文件夹,我正在尝试提供一个命令,该命令可以移动以string1*开头但不以*string2 /folder1结尾的文件移动到/folder2 }

包含这两个相反条件(HAS和HAS NOT)的命令会是什么样的?

3 个答案:

答案 0 :(得分:0)

#!/bin/bash
for i in `ls -d /folder1/string1* | grep -v 'string2$'`
do
   ls -ld $i | grep '^-' > /dev/null # Test that we have a regular file and not a directory etc.
   if [ $? == 0 ]; then
      mv $i /folder2
   fi
done

答案 1 :(得分:0)

尝试类似

的内容
find /folder1 -mindepth 1 -maxdepth 1 -type f \
-name 'string1*' \! -name '*string2' -exec cp -iv {} /folder2 +

注意:如果您的查找版本较旧,可以将+替换为\;

答案 2 :(得分:0)

对我来说,这是(我将表示)read while模式的另一种情况。

cd /folder1
ls string1* | grep -v 'string2$' | while read f; do mv $f /folder2; done

其他答案是很好的选择,特别是find可以做批次。但是我总是使用find来解决这个问题,并且如果没有打开联机帮助页,就永远不会使用它。

此外,从ls或简单find开始获取文件列表,然后使用sedawk,{{1}中的任意一个或全部或者你必须提供的任何东西,调整/修剪/扩展这个列表,然后将它整理成一个循环,是一种原始的(ish)但非常强大的技术。