Share.Ninja

La ligne de commande

sninja, c'est Share.Ninja dans le terminal. Le programme partage des fichiers par lien et télécharge les liens des autres, avec le même compte et les mêmes liens que les applications. Les fichiers sont chiffrés sur votre ordinateur avant d'en sortir, et le lien s'ouvre chez le destinataire dans n'importe quel navigateur.

Installation

macOS 13 ou plus récent sur Apple Silicon, avec Homebrew :

brew install shareninjahq/sninja/sninja

Windows 10 ou plus récent, x64, avec winget :

winget install Share.Ninja.CLI

Pour vérifier que tout est en place : sninja --version.

Partager par lien

sninja put report.pdf photos/

Le programme chiffre les fichiers, les envoie et affiche le lien. Envoyez-le à qui vous voulez : il s'ouvre dans n'importe quel navigateur, et le destinataire n'a besoin ni d'application ni de compte.

Avec le nom d'un dossier, c'est le dossier entier qui est partagé. Avec une barre oblique à la fin, ou un glob, seulement son contenu :

sninja put build # a folder named build sninja put build/ # the contents of build

Options :

-d "Q3 slides"
Une description du partage ; elle s'affiche chez qui ouvre le lien.
--validity 12h
La durée de vie du lien : des secondes, ou 90s, 15m, 12h, 7d, 2w ; 0 signifie jusqu'à ce que vous le supprimiez vous-même. Par défaut, sept jours. Si vous demandez plus que ce que votre formule autorise, la durée est ramenée au maximum de la formule, et le programme vous le dit.
--streams 1
Envoyer les fichiers un par un ; par défaut, cinq à la fois.

Télécharger

On peut d'abord regarder ce qu'il y a dedans :

sninja list 'https://share.ninja/#…' --tree

--table affiche les tailles et les dates à la place de l'arborescence, --path docs commence dans un sous-dossier, --non-recursive n'affiche qu'un niveau. Ensuite :

sninja get 'https://share.ninja/#…' -o ~/Downloads

Les fichiers arrivent dans le dossier donné par -o, par défaut le dossier courant. Mettez le lien entre guillemets, sinon le shell avale tout ce qui suit le #.

--filter 'docs/**/*.pdf'
Ne télécharger que les fichiers dont le chemin correspond au motif.
--force
Si le nom est déjà pris, enregistrer le fichier à côté sous « Nom 1 » au lieu de s'arrêter.

Un téléchargement interrompu reprend là où il s'est arrêté : relancez simplement le même get.

Un lien sans rien envoyer

sninja direct build/ --ttl 3600

Le programme affiche tout de suite un lien et sert les fichiers directement depuis cet ordinateur tant qu'il tourne. Rien ne part dans le cloud. Arrêtez-le avec Ctrl+C ou donnez-lui une durée en secondes avec --ttl ; dans les deux cas, il ne reste ensuite rien à télécharger. C'est tout l'intérêt.

Votre compte

Tout ce qui précède fonctionne sans compte. Connectez-vous si vous voulez retrouver vos partages sur vos autres appareils :

sninja auth login

Le navigateur s'ouvre pour la connexion. La session est conservée dans le trousseau du système : sninja auth status l'affiche, sninja auth logout la supprime.

Un nouvel appareil n'obtient l'accès qu'après confirmation depuis un appareil auquel vous faites déjà confiance. Ce terminal ne fait pas exception :

sninja vault join --wait

Le programme affiche l'empreinte de l'appareil et attend. Approuvez la demande sur un appareil de confiance, en vérifiant que l'empreinte correspond, et la commande se termine connectée. Sans --wait, elle rend la main tout de suite ; sninja vault status vous dit où vous en êtes.

Une fois connecté :

sninja links
Vos liens ; sans connexion, les liens de cet appareil.
sninja link <token>
Un lien en détail. Avec --mint, la commande affiche un nouveau lien vers le même partage, prêt à envoyer.

Pour l'instant, arrêter un partage ne se fait que dans l'application ou sur share.ninja ; la ligne de commande n'a pas encore de commande pour cela.

Scripts

La progression et l'état sortent aussi sur stdout : prenez donc le lien dans les dernières lignes, pas dans toute la sortie. list, link et links peuvent écrire leur résultat dans un fichier JSON : --json <file>. Les journaux vont sur stderr ; --verbose les rend plus détaillés.