要管理我的备份同步文件夹,我正在尝试提供一个命令,该命令可以移动以string1*
开头但不以*string2
/folder1
结尾的文件移动到/folder2
}
包含这两个相反条件(HAS和HAS NOT)的命令会是什么样的?
答案 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
开始获取文件列表,然后使用sed
,awk
,{{1}中的任意一个或全部或者你必须提供的任何东西,调整/修剪/扩展这个列表,然后将它整理成一个循环,是一种原始的(ish)但非常强大的技术。