Elimina il file punto solo se il file non puntato esiste in * nix


0

Sto spostando file da un filesystem FAT32 in un filesystem EXFAT su un Mac. La mia comprensione è che FAT32 non supporta gli attributi di file estesi quindi ha creato file di punti per ogni file.

Comunque ora che ho copiato tutto in un filesystem exFAT, vorrei eliminare questi file di punti. Esiste un modo per copiare un file di punti ma solo se esiste un file senza punti nella stessa directory (in questo modo posso evitare di eliminare i file di punti che sono file di configurazione).

Questo sarebbe su una CLI Mac.

Grazie!


È abbastanza facile (es for f in .*; do [ -e "${f#.}" ] && rm "$f"; done ), ma attenzione a uno scontro: su Ubuntu ho creato i file senza rendermi conto che esiste un file equivalente con a . prefisso e non ci sono problemi, ma non so cosa succederebbe su un disco FAT Mac.
AFH

Risposte:


1

Crea uno script di shell eseguibile:

#!/bin/bash
for dotfile ; do
    path=${dotfile%/.*}
    name=${dotfile##*/.}
    if [[ -f $path/$name ]] ; then
        rm "$dotfile"
    fi
done

Quindi esegui dalla parte superiore della directory che desideri cancellare:

find -name '.*' -exec rm-dotfiles.sh {} +

Dove rm-dotfiles.sh è il nome dello script.


0

La rimozione di un file di punti solo se esiste il file non puntato corrispondente è la stessa cosa che rimuovere il file di punti corrispondente per tutti i file non di punti. Così:

for f in *; do rm -f ".$f"; done

Si noti che il * sopra normalmente corrisponde solo ai file non-dot, a meno che non lo abbiate fatto shopt -s dotglob (nel qual caso è meglio resettare prima di emettere il comando).

Una versione ricorsiva di directory potrebbe essere:

for f in $(find -type f -name '[^.]*');do rm -f "$(dirname $f)/.$(basename $f)";done

(lo schema del nome in find esclude i file punto)


Come posso far verificare anche tutte le sottocartelle?
zundi

Vedi la risposta modificata
xenoid
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.