Если Вы не хотите к grep в каталоги такой как .svn
когда-либо можно установить $GREP_OPTIONS
переменная для исключения его как указано ниже:
export GREP_OPTIONS="--exclude-dir=\*/.svn/\*"
Просто добавьте эту строку к Вашему .bashrc
и Ваши рекурсивные власти больше не введут .svn
каталоги. Конечно, это может быть столь богато, как Вы хотите:
export GREP_OPTIONS="--exclude-dir=\*/.svn/\* --exclude-dir=\*/.hg/\* --exclude-dir=\*/.git/\* --exclude=\*~"
Вам нужно расширение подстановочного знака для случая в оболочке, это выполняется после file
был заменен под названием файл соответствия. Таким образом, необходимо запустить оболочку с xargs
.
Лучше, чем использование xargs
, используйте exec
предикат к find
. Это более просто и не страдает от заключения в кавычки проблем.
find -maxdepth 1 -regex 'myRegexExpHere' -exec sh -c 'mv "$0"/* Desktop/New\ folder/' {} \;
Вы, вероятно, сверхусложняете вещи. Это простое использование find
может быть выражен непосредственно в большинстве оболочек. Ksh имеет синтаксис для регулярных выражений:
@(EXPR1|EXPR2)
соответствия EXPR1
или EXPR2
*(EXPR)
соответствия 0 или больше возникновения EXPR
+(EXPR)
соответствия 1 или более возникновения EXPR
?(EXPR)
соответствия 0 или 1 возникновение EXPR
Этот синтаксис также доступен в ударе, если Вы работаете shopt -s extglob
во-первых, и в zsh, если Вы работаете setopt ksh_glob
сначала. Затем можно использовать
mv REGEX/* Desktop/New\ folder/
Почему использование find
когда Вам не нужна рекурсия? Используйте оболочку (я принимаю Bash здесь, изменяю для удовлетворения потребностям) для соответствия regex:
for dir in */;do
if [[ "$dir" =~ yourRegexHere ]];then
mv -- "$dir"/* "Desktop/New folder/"
fi
done
Если regex возможности Вашей оболочки слишком слабы для Ваших требований, это не добирается немного лучше, чем Perl:
perl -e 'for(grep {/yourRegexHere/} glob "*/"){
qx(mv -- "$_"/* "Desktop/New folder")
}'