Найдите файл и отправьте его на ftp


Я новичок в bash scripting, и мне нужно написать сценарий, который находит самые новые .mpg-файл в каталоге, а затем отправляет его на ftp-сервер. До сих пор я нашел команду, которая находит мой файл.

#! /bin/bash

find /home/user/directory -type f -mmin -50 -name *.mpg ( ! -regex ".*/..*" )

Это работает, но я не могу понять, как отправить вывод этой команды на ftp-сервер. Я читал, что мне приходится использовать переменные, но я не могу понять их до сих пор.

1 2

1 ответ:

Use может передавать выходные данные из одной команды в качестве входных данных в другую с помощью |

find /home/user/directory -type f -mmin -50 -name *.mpg \( ! -regex ".*/\..*" \) | ftp ...

Более простой способ найти последний файл mpg:

ls -rt /home/user/directory/*.mpg | head -1 | ftp ...

Если вы хотите отправить несколько файлов xargs будут необходимы, т. е. для 5 новейших файлов

ls -rt /home/user/directory/*.mpg | head -5 | xargs ftp ...

ls перечисляет файлы в /home/user/directory/*.mpg, где * расширяется до любого имени файла, где с расширением .mpg. -t говорит ls перечислять во временном порядке и -r является обратной сортировкой, так как мы хотим, чтобы самый новый первый не старейший. Команда head используется только для отображения количества результатов, которые мы хотим получить, например один -1 или пять -5. head обычно используется для просмотра только определенного количества строк в файле, для просмотра первой строки в файле мы бы запустили head -1 file.txt.

Пример трубы:

grep используется для поиска текста в файлах / stdout

Поэтому, если вы хотите знать, содержится ли firefox в первой строке file.txt , мы бы pipe вывели head -1 file.txt в grep firefox

head -1 file.txt | grep firefox

Вы можете передать несколько команд вместе, чтобы достичь желаемого результата.