Можно ли использовать трубку вместо exec in – find / -name ".txt" -exec cp {} / junk \;

Если я хочу найти файлы с .txt в имени и для каждого найденного совпадения скопируйте его в папку /junk , я понимаю, что могу использовать следующее:

 find / -name ".txt" -exec cp {} /junk \; 

Может ли использоваться труба вместо -exec в приведенной выше команде?

Я думаю, что я помню, как кто-то говорил, что труба будет работать с каждой стороны (трубы) в то же самое время, когда -exec будет работать с левой стороны, а затем с правой стороны? Мне не хватает воспоминания об этом? Труба, очевидно, должна получить выход из левой команды, прежде чем он выдает результат правой команде, поэтому я не вижу, как они могут работать одновременно.

2 Solutions collect form web for “Можно ли использовать трубку вместо exec in – find / -name ".txt" -exec cp {} / junk \;”

Для этого вы можете использовать cpio в режиме копирования.

 find sourcedir -name "*.txt" | cpio -pd /junk 

cpio принимает список файлов со стандартного ввода, а в режиме копирования-копирования копирует файлы в целевой каталог.

Вы также можете направить find на команду xargs

Голые фрагменты из – http://www.unixmantra.com/2013/12/xargs-all-in-one-tutorial-guide.html

Найдите все файлы .mp3 в музыкальной папке и перейдите к команде ls, -print0 требуется, если в каких-либо именах файлов есть пробелы.

  find ./music -name "*.mp3" -print0 | xargs -0 ls 

Найдите все файлы в рабочей папке, перейдите в grep и найдите прибыль:

  find ./work -print | xargs grep "profit" 

Вы должны использовать {} с другой командой, которая принимает более двух аргументов за раз. Например, команде mv необходимо знать имя файла. Ниже вы найдете все .bak-файлы в каталоге или ниже текущего каталога и переместите их в каталог ~ / .old.files:

 find . -name "*.sh" -print0 | xargs -0 -I {} mv {} ~/back.scripts 

Вы можете переименовать {} в другое. В следующем примере {} переименовывается как файл. Это более читаемо по сравнению с предыдущим примером:

 find . -name "*.sh" -print0 | xargs -0 -I file mv file ~/back.scripts 

Где,

-0 Если есть пробелы или символы (включая новые строки), многие команды не будут работать. Эта опция берет на себя имена файлов с пробелом.

-I Заменить имена replace-str в начальных аргументах именами, считанными со стандартного ввода. Кроме того, некотируемые пробелы не прерывают входные элементы; вместо этого разделитель является символом новой строки.

  • piping ssh к сценарию оболочки и не видеть stdin echo
  • sed count lines между шаблоном - несколько файлов
  • Сценарий оболочки с трубами, не работающими в crontab
  • Почему эта команда ssh не работает? (cat ./file | ssh <user @ host> "cat | sudo -t -t 'cat> / root / location / file'")
  • Поиск файлов и отправка в файл temp
  • Конкатенация содержимого файла И имен
  • Как перенаправить вывод программы в ZIP-файл?
  • Как читать из трубных позиций позиционные параметры?
  • Заменить номер CD в теге MP3 ID3
  • Можно ли сделать текст вывода zcat, даже если он несжатый?
  • как лучше отправить вывод команды find + exec в конвейер?
  • Linux и Unix - лучшая ОС в мире.