Шаблон Grep включая тире и ограничивающий расширением файла

В Windows Os можно использовать WinSCP.

На Linux инструмент командной строки использования OS scp как это. От удаленного хоста до localhost

scp your_username@remotehost.com:foobar.txt /some/local/directory

От localhost до удаленного хоста (у Вас есть к specifiy полный путь),

scp foobar.txt your_username@remotehost.com:/some/remote/directory 

3
27.12.2019, 21:46
4 ответа

Проблема в том, что -R указывает grep на рекурсивный поиск по всем файлам в каталоге. Таким образом, вы не можете комбинировать его с определенной группой файлов. Поэтому вы можете использовать find по предложению @KM. , или shell globbing:

$ shopt -s globstar
$ grep -- "->-" **/*.tex

Команда shopt активирует функцию bash's globstar:

globstar
                  If set, the pattern ** used in a pathname expansion con‐
                  text will match all files and zero or  more  directories
                  and  subdirectories.  If the pattern is followed by a /,
                  only directories and subdirectories match.

Затем вы даете **/*.tex в качестве шаблона, который будет соответствовать всем файлам .tex в текущем каталоге и любых подкаталогах.

Если вы используете zsh, то нет необходимости в shopt (что в любом случае является функцией bash), так как zsh может делать это по умолчанию.

6
27.01.2020, 21:07

Решили это по совпадению: необходимо использовать parallel --gnu , чтобы примеры страниц man работали. Дух!

-121--145865-

Попробуйте найти и grep вместо этого, с -exec :

find path_to_tex_files_directory -name "*.tex" -exec grep -- "->-" {} \;

или с xargs

find path_to_tex_files_directory -name "*.tex" | xargs grep -- "->-"
-121--93867-

-R опцией для рекурсивных, я думаю, у вас нет dir в образец * .texx

Может быть, попробуйте что-то вроде:

find . -name \*.tex -exec grep -l -- "->-" {} \;
  • вы можете удалить параметр -l , если вас не волнует имя файла
  • , если вы хотите увидеть имя файла и образец:

     найти. -name\* .tex -exec grep -l -- «- > -» {}\; | xargs grep -- «- > -»
    

    но это двойная группа, решение @ KM кажется лучше.

2
27.01.2020, 21:07

Попробуйте Найти и AREP вместо этого, с -Exec :

find path_to_tex_files_directory -name "*.tex" -exec grep -- "->-" {} \;

или с Xargs

find path_to_tex_files_directory -name "*.tex" | xargs grep -- "->-"
7
27.01.2020, 21:07

Если ваш GREP поддерживает его 1 , вы можете использовать - включить - включить коммутатор :

grep -R --include '*.tex' -- "->-"

или

grep -R --include='*.tex' -- "->-"

1:
Доступно по крайней мере в GNU GREP :

--include=GLOB
        Search only files whose base name matches GLOB

и OSX GREP :

--include
        If specified, only files matching the given filename pattern are searched.
3
27.01.2020, 21:07

Теги

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