find
+awk
solución:
find /net/*/scenes -maxdepth 1 -type f -name "*.mb" \
| awk -F'/' '{ fn = $NF; $NF = "" }!a[$0]++{ print $0 fn }' OFS='/'
-F'/'
yOFS='/'
-representan el separador de campo de entrada y salida fn = $NF
-almacenar el último valor de campo (, es decir, un nombre de archivo )en la variablefn
!a[$0]++{ print $0 fn }
-en la primera aparición de la ruta de directorio única (presentada por$0
)imprima la línea (la ruta de archivo completa)O usando canalización GNU coreutils
:
find /net/*/scenes -maxdepth 1 -type f -name "*.mb" -printf "%H %p\n" \
| sort -k1,1 -u | cut -d' ' -f2
Используйте скрипт-оболочку в качестве ForceCommand
. Скажем, что-то вроде этого скрипта (, сохраненного в/usr/local/bin/myshell
):
#! /bin/bash
if [[ -n $SSH_ORIGINAL_COMMAND ]] # command given, so run it
then
exec /bin/bash -c "$SSH_ORIGINAL_COMMAND"
else # no command, so interactive login shell
exec bash -il
fi
В действии:
% grep ForceCommand -B1 /etc/ssh/sshd_config
Match user muru
ForceCommand /usr/local/bin/forceshell
% ssh muru@localhost
$ ls
Desktop Documents Downloads Music Pictures Public Templates Videos
$ logout
Connection to localhost closed.
% ssh muru@localhost echo foo
foo
% ssh muru@localhost echo '*'
Desktop Documents Downloads Music Pictures Public Templates Videos