Usa Comandi rapidi per Mac per passare del testo a uno script shell che seleziona il file di testo modificato più di recente in una cartella locale e vi aggiunge la tua voce. Questa guida usa file di esempio temporanei e si interrompe se la cartella è vuota o se gli orari più recenti coincidono.

Il compito è specifico: aggiungere una breve voce a un file di testo semplice esistente senza dover scegliere quel file manualmente ogni volta. Apple documenta il supporto agli script shell in Comandi rapidi per Mac. Il flusso di lavoro qui sotto combina questa funzionalità supportata con le modalità documentate di zsh per selezionare i file e aggiungere testo. Introduzione a Comandi rapidi per macOS

Decidi cosa significa «file più recente»

In questo articolo, «più recente» significa modificato più di recente. Lo script considera solo i file visibili e regolari i cui nomi terminano con .txt minuscolo, direttamente all’interno della cartella designata. Esclude le sottocartelle e i collegamenti simbolici. Queste regole di selezione derivano dai pattern e dai qualificatori dei nomi di file di zsh. Espansione

Questa definizione influisce sulle esecuzioni ripetute. Dopo aver aggiunto testo a un file, il suo orario di modifica cambia, quindi in genere continuerà a essere il file idoneo più recente. Se intendi seguire il documento creato più di recente, l’orario di modifica è una regola diversa: non dare per scontato che questo flusso di lavoro selezioni in base alla data di creazione.

Prima di creare il comando rapido, scegli la regola adatta al tuo compito:

Compito previsto Questo esempio è adatto?
Aggiungere testo al file .txt modificato più di recente Sì
Aggiungere testo al file con la data più recente nel nome No; i nomi dei file non vengono interpretati come date
Aggiungere testo al file creato più di recente No; l’orario di creazione non viene usato
Includere file nelle sottocartelle No; la selezione è limitata a una cartella
Aggiungere testo a un documento formattato o a un PDF No; questo esempio scrive testo semplice

Il Finder offre un utile controllo visivo. Apri la cartella in vista elenco e fai clic sull’intestazione della colonna Data ultima modifica; se necessario, fai nuovamente clic per mettere per primo l’elemento più recente. Apple documenta sia l’ordinamento per colonna sia l’inversione dell’ordine. La visualizzazione del Finder ti aiuta a controllare il risultato, ma lo script esegue la propria selezione. Ordinare e disporre gli elementi nel Finder sul Mac

Crea una cartella di esempio temporanea

L’esempio usa una cartella chiamata Shortcut Append Demo nella cartella Inizio. La procedura di configurazione si interrompe intenzionalmente se quel nome esiste già, invece di riutilizzarne il contenuto. Crea due file di testo sintetici, con un intervallo di due secondi affinché il secondo abbia un orario di modifica successivo.

Apri Terminale, incolla il blocco completo di configurazione e premi Invio. L’heredoc tra virgolette esegue i comandi in un processo zsh separato, quindi un errore di configurazione termina quel processo.

/bin/zsh <<'ZSH'
emulate -L zsh
setopt ERR_EXIT
folder="$HOME/Shortcut Append Demo"

if ! /bin/mkdir "$folder"; then
  printf '%s\n' 'Setup stopped: use a new folder name if this one exists.' >&2
  exit 1
fi

printf '%s\n' 'Sample entry: blue notebook.' > "$folder/older.txt"
/bin/sleep 2
printf '%s\n' 'Sample entry: green notebook.' > "$folder/newer.txt"
printf 'Example folder: %s\n' "$folder"
ZSH

La configurazione usa il reindirizzamento dell’output per creare i file solo dopo aver creato correttamente la nuova cartella. Apple distingue il normale reindirizzamento dell’output, che scrive l’output dei comandi in un file, dal reindirizzamento in modalità aggiunta, che aggiunge l’output alla fine. Reindirizzare l’input e l’output di Terminale sul Mac

Se la configurazione segnala che la cartella esiste già, scegli un altro nome temporaneo e modifica l’assegnazione della cartella sia nella configurazione sia nello script del comando rapido riportato sotto. Non rieseguire singole righe che scrivono file in una cartella già esistente.

Crea il comando rapido e mantieni l’input di testo

Crea un nuovo comando rapido nell’app Comandi rapidi e chiamalo Append to Newest Text File. Usa la ricerca delle azioni per aggiungere quelle elencate di seguito. Apple documenta la ricerca nella libreria delle azioni e la verifica dell’input accettato e dell’output risultante di ciascuna azione tramite Mostra info. Esplorare l’elenco delle azioni in Comandi rapidi sul Mac

  1. Aggiungi un’azione Testo contenente la voce sintetica Sample entry: orange notebook.
  2. Subito dopo, aggiungi Esegui script shell.
  3. Imposta la shell su /bin/zsh.
  4. Imposta l’input dello script sull’output dell’azione Testo precedente.
  5. Imposta Passa input su come argomenti.
  6. Sostituisci il contenuto del campo dello script con lo script completo della sezione successiva.

La connessione prevista è un valore Testo passato a un solo argomento dello script. Lo script legge quell’argomento come $1. L’output in caso di esito positivo è una conferma testuale che contiene il percorso di destinazione; quel percorso non è un oggetto File di Comandi rapidi e l’output non contiene l’intero contenuto del file.

Mantieni l’input collegato all’output di Testo. Passare un file, un elenco di nomi di file o un input non correlato del comando rapido cambierebbe ciò che arriva allo script. Lo script controlla il numero di argomenti affinché una raccolta di input imprevista non diventi una serie di voci aggiunte.

Se gli script sono disabilitati, apri Comandi rapidi > Impostazioni, seleziona Avanzate e abilita Consenti esecuzione script. Questi sono i controlli documentati da Apple per consentire l’esecuzione degli script nei comandi rapidi. Istruzioni di Apple per l’impostazione degli script

Aggiungi lo script che seleziona il file e vi accoda il testo

Incolla l’intero programma in Esegui script shell. Non richiede strumenti scaricati né un file di script separato. L’assegnazione della cartella corrisponde alla configurazione temporanea descritta sopra.

emulate -L zsh
unsetopt CLOBBER APPEND_CREATE

fail() {
  printf '%s\n' "$1" >&2
  exit 1
}

(( $# == 1 )) || fail 'Expected exactly one text input.'
[[ -n "$1" ]] || fail 'The text input is empty.'

folder="$HOME/Shortcut Append Demo"
[[ -d "$folder" ]] || fail 'The example folder does not exist.'

files=( "$folder"/*.txt(N.om) )
(( ${#files} > 0 )) || fail 'No eligible .txt files were found.'

newest="${files[1]}"

if (( ${#files} > 1 )); then
  [[ "$newest" -nt "${files[2]}" ]] ||
    fail 'The newest timestamp is tied or the folder changed. Check the files.'
fi

[[ -f "$newest" && ! -L "$newest" ]] ||
  fail 'The selected file is no longer an eligible regular file.'
[[ -w "$newest" ]] || fail 'The selected file is not writable.'

if ! printf '\n%s\n' "$1" >> "$newest"; then
  fail 'Append failed; inspect the selected file before retrying.'
fi

printf 'Appended to: %s\n' "$newest"

L’espressione di selezione crea un array di percorsi dei file corrispondenti. In (N.om), N consente una corrispondenza vuota, . limita le corrispondenze ai file regolari e om ordina in base all’orario di modifica, con il più recente per primo. Conservare i percorsi in un array evita di suddividere i nomi dei file in corrispondenza degli spazi. Espansione

Il controllo successivo richiede che il primo file sia strettamente più recente del secondo. Se gli orari di modifica coincidono, il comando rapido si interrompe invece di scegliere un file senza avvisare. zsh documenta -nt per confrontare l’età dei file, insieme ai controlli per file regolare, collegamento simbolico e file scrivibile usati qui. Espressioni condizionali

Il comando di aggiunta usa un formato fisso printf e fornisce la tua voce come argomento %s. Pertanto, i caratteri di percentuale e le barre rovesciate presenti nella voce vengono trattati come testo, non come ulteriori istruzioni di formattazione. Il carattere di nuova riga iniziale separa la voce dal testo esistente; quello finale la termina. Se il file termina già con una nuova riga, tra le voci verrà inserita una riga vuota. Comandi integrati della shell

Lo script annulla anche l’impostazione di CLOBBER e APPEND_CREATE. zsh documenta che, con entrambe le opzioni non impostate, il reindirizzamento in modalità aggiunta fallisce se la destinazione non esiste. Questo è importante se il file selezionato scompare prima dell’aggiunta: lo script dovrebbe segnalare un errore invece di creare un sostituto nel percorso precedente. Reindirizzamento

Controlla il risultato con i file di esempio

Esegui il comando rapido una volta. Con la cartella di esempio intatta, la destinazione prevista è newer.txt. Apri il file e verifica che contenga il testo seguente. Questo è il risultato previsto in base all’esempio, non l’affermazione che sia stato completato un test nell’interfaccia di Mac.

Sample entry: green notebook.

Sample entry: orange notebook.

Apri anche older.txt. Dovrebbe contenere ancora solo Sample entry: blue notebook. Controllare entrambi i file verifica le due parti del compito: selezionare una destinazione e preservare l’altro file.

Prova una seconda voce sintetica modificando l’azione Testo in Sample entry: yellow notebook. ed eseguendo di nuovo il comando. Aspettati un’altra voce separata in newer.txt, a condizione che nessun altro file idoneo sia diventato più recente. Se esegui due volte il comando rapido con lo stesso input, quel testo verrà aggiunto due volte; questo programma non rileva le voci duplicate.

Questi esempi sono stati confrontati con la documentazione, ma non sono stati eseguiti qui: l’ambiente disponibile non dispone né di Comandi rapidi per macOS né di zsh. Completa il controllo con i file temporanei sul tuo Mac prima di adattare l’assegnazione della cartella.

Comprendi cartelle vuote, conflitti di nome e file modificati

Il flusso di lavoro richiede una destinazione esistente. Se la cartella non esiste, è vuota o contiene solo elementi non idonei, viene generato un errore prima dell’aggiunta. Non crea un file predefinito, non sceglie una sottocartella e non ripiega su un documento con un nome diverso.

I conflitti di nome vengono gestiti evitando del tutto la creazione della destinazione. La configurazione si interrompe se la cartella ha già il nome scelto. Durante le normali esecuzioni del comando rapido, il file selezionato mantiene il nome attuale: lo script non lo rinomina e non ne salva una seconda copia. Il comportamento separato per i file mancanti è controllato dalle opzioni documentate di zsh per l’aggiunta. Reindirizzamento

Se il risultato è diverso da quello previsto, usa questa breve sequenza diagnostica:

  1. Controlla l’assegnazione della cartella. Deve corrispondere alla cartella creata durante la configurazione.
  2. Controlla i criteri di idoneità. Il pattern di esempio include i file regolari visibili che terminano con .txt minuscolo al livello superiore della cartella.
  3. Controlla l’ordine di modifica. Esamina Data ultima modifica nel Finder, ricordando che modificare un file può renderlo la destinazione successiva.
  4. Controlla gli orari coincidenti. Modifica e salva il file di esempio desiderato in un secondo momento, poi controlla di nuovo l’ordine.
  5. Controlla il collegamento dell’azione. Un valore di testo deve arrivare alla shell come un singolo argomento.

Lo script è pensato per una cartella che rimane invariata durante l’esecuzione. La selezione e la scrittura sono operazioni separate: un altro processo potrebbe modificare, sostituire o aggiungere un file nel frattempo. I controlli non trasformano il flusso di lavoro in una transazione e un errore di scrittura può lasciare una voce aggiunta solo in parte. Dopo un errore di aggiunta, controlla il file prima di riprovare.

Quando usare i filtri nativi per i file

Apple documenta Filtra file come un’azione che accetta contenuti, li restringe tramite filtri e passa i risultati corrispondenti all’azione successiva. I controlli generali dei filtri possono ordinare i risultati e limitarne il numero. Queste operazioni aiutano a selezionare un file, ma non vi aggiungono testo. Introduzione alle azioni Trova e Filtra, Aggiungere parametri di filtro

Questa guida mantiene la selezione e la scrittura insieme nello script shell, così il pattern dei file, la gestione degli orari coincidenti e il requisito di un file esistente sono espliciti. Se crei una catena diversa usando azioni per i file, controlla prima Mostra info di ciascuna azione: un risultato di tipo File, il contenuto di un file convertito in Testo e un percorso rappresentato come Testo sono valori diversi. Apple fornisce queste descrizioni delle azioni proprio per identificare i tipi di input e output. Esplorare l’elenco delle azioni in Comandi rapidi sul Mac

Una volta verificato il comportamento previsto dell’esempio, mantieni lo stesso contratto chiaro quando lo adatti: una voce di testo, una cartella locale designata e un solo file idoneo strettamente più recente. In questo modo ogni esecuzione è prevedibile e, se il comando rapido si interrompe, sai dove iniziare a cercare.

Fonti