Используйте xargs для перемещения файлов из каталога

Если Вы не хотите к 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=\*~"
2
12.11.2013, 22:13
2 ответа

Вам нужно расширение подстановочного знака для случая в оболочке, это выполняется после 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/
2
27.01.2020, 22:06

Почему использование 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") 
         }'
1
27.01.2020, 22:06
  • 1
    Таким образом, я должен всегда пытаться использовать цикл, когда я должен выполнить такие операции? Каковы случаи затем, где единственная команда принесла бы пользу мне? –  Parag Goel 13.11.2013, 08:42

Теги

Похожие вопросы