Вы можете использовать тройник
, чтобы направить свой вывод на терминал другого человека, если вы знаете, какой терминал он использует.
Вы можете использовать команду w
, чтобы узнать терминал:
user4@myubuntu:~$ w
16:41:36 up 13 min, 4 users, load average: 0.55, 0.60, 0.46
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
user1 :0 :0 16:28 ?xdm? 6:28 0.03s gdm-session-worker [pam/gdm-password]
user2 pts/1 :0 16:38 2:46 0.04s 0.04s bash
user3 pts/7 :0 16:38 1:32 0.09s 0.09s bash
user4 pts/8 :0 16:41 4.00s 0.05s 0.00s w
Я user4
на терминале pts / 8
. Если я хочу отправить свой вывод на user2
на терминале pts / 1
, я использую следующую команду для запуска новой оболочки:
$ bash | tee /dev/pts/1
Затем весь вывод моих последующих команд (но не ввод) будет скопирован на терминал user2
. Если вы закончили, просто нажмите Ctrl-D
, чтобы завершить работу оболочки.
Если вы хотите отправить сообщение или текст другому пользователю, вы можете использовать команду write
:
$ write <username>
hello, are you there ?
Ctrl-d
Этот ответ не учитывает ограничение «не старше 1 дня».
Вместо того, чтобы пытаться анализировать вывод find
, используйте rsync
напрямую изfind
:
find /mnt/IP/ftp/123 -type -name '1[14].*' -prune \
-exec rsync -av \
--include='*.bin' --include='*/' \
--exclude='*' --prune-empty-dirs {} /home/ftp/123 ';'
Это позволит найти каталоги, имена которых начинаются с 11.
или 14.
в или под /mnt/IP/ftp/123
. Для каждого такого каталога он удаляет каталог из списка поиска (с помощью -prune
), а затем выполняет
rsync -av --include='*.bin' --include='*/' \
--exclude='*' --prune-empty-dirs {} /home/ftp/123
, где {}
будет заменено путем к найденному каталогу.
Команда rsync
создаст подкаталог /home/ftp/123
с тем же именем файла, что и найденный каталог (, т. е. начиная с 11.
или 14.
), а затем скопирует файлы .bin
.
Шаблоны включения и исключения, используемые сrsync
(победами в первом матче):
--include='*.bin'
:включает любой файл, имя которого заканчивается на .bin
. --include='*/'
:включить любой каталог. Пустые каталоги в цели будут удалены из-за --prune-empty-dirs
. --exclude='*'
:исключить все, что не включено в предыдущие правила. Вы можете использовать find
для создания набора файлов, удовлетворяющих вашим трем критериям:
11.*
или14.*
*.bin
, а затем передать этот список в rsync
для обработки:
find mnt/IP/ftp/123/./ -mtime -1 \( -path '*/1[14].*/*' -prune \) -name '*.bin' -print0 |
rsync -av --files-from - --from0 --prune-empty-dirs / dst/
Я использовал -print0
и -from0
, чтобы обеспечить правильную обработку файлов с неожиданными символами в именах. Дополнительный /./
в пути find
указывает rsync
, что все, что находится перед этим компонентом, должно быть удалено из пути назначения. (Если вы решите использовать относительный путь в find
(, то есть такой, который не начинается с /
), измените источник rsync
с /
на .
.)
Пример сценария
# All files in the example
find /mnt/IP/ftp/123/./ -type f
/mnt/IP/ftp/123/./11.one/7.skip/skip.bin
/mnt/IP/ftp/123/./11.one/item.bin
/mnt/IP/ftp/123/./12.skip/item.bin
/mnt/IP/ftp/123/./14.one/item.bin
/mnt/IP/ftp/123/./item.bin
/mnt/IP/ftp/123/./sub/13.skip/item.bin
/mnt/IP/ftp/123/./sub/14.next/item.bin
/mnt/IP/ftp/123/./sub/14.next/skip.this
/mnt/IP/ftp/123/./sub/item.bin
# Files matched by "find"
find mnt/IP/ftp/123/./ -mtime -1 \( -path '*/1[14].*/*' -prune \) -name '*.bin' -print
/mnt/IP/ftp/123/./11.one/item.bin
/mnt/IP/ftp/123/./14.one/item.bin
/mnt/IP/ftp/123/./sub/14.next/item.bin
# Files copied by "rsync"
find /mnt/IP/ftp/123/./ -mtime -1 \( -path '*/1[14].*/*' -prune \) -name '*.bin' -print0 |
rsync -av --files-from - --from0 --prune-empty-dirs / dst/
building file list... done
11.one/
11.one/item.bin
14.one/
14.one/item.bin
sub/
sub/14.next/
sub/14.next/item.bin