GNU/Linux >> Znalost Linux >  >> Linux

Převést pevný odkaz na symbolický odkaz?

Je snadné převést symbolický odkaz na pevný odkaz pomocí ln -f (příklad)

Také by bylo snadné převést pevný odkaz (názvy souborů link a original ) zpět na symbolický odkaz na link->original v případě, že znáte oba soubory a sami si určíte, který z nich je „původní soubor“. Můžete snadno vytvořit jednoduchý skript convert-known-hardlink-to-symlink výsledkem by bylo něco jako:

convert-known-hardlink-to-symlink link original
$ ls -li
3802465 lrwxrwxrwx 1 14 Dec  6 09:52 link -> original
3802269 -rw-rw-r-- 1  0 Dec  6 09:52 original

Ale bylo by opravdu užitečné, kdybyste měli skript, kde byste mohli definovat pracovní adresář (výchozí ./ ) a vyhledávací adresář, kde hledat (výchozí / ) pro soubory se stejným inodem a poté převeďte všechny tyto pevné odkazy na symbolické odkazy.

Výsledkem by bylo, že v definovaném pracovním adresáři jsou všechny soubory, které jsou pevnými odkazy, nahrazeny symbolickými odkazy na první nalezený soubor se stejným inodem.

Začátek by byl find . -type f -links +1 -printf "%i: %p (%n)n"

Přijatá odpověď:

Vytvořil jsem skript, který to udělá. Skript převede všechny pevné odkazy, které najde ve zdrojovém adresáři (první argument), které jsou stejné jako v pracovním adresáři (volitelný druhý argument), na symbolické odkazy:

https://gist.github.com/rubo77/7a9a83695a28412abbcd

Má volbu -n pro běh nasucho, která nedělá nic, ale ukazuje, co by se udělalo.

Hlavní část:

$WORKING_DIR=./
#relative source directory from working directory:
$SOURCE_DIR=../otherdir/with/hard-links/with-the-same-inodes

# find all files in WORKING_DIR
cd "$WORKING_DIR"
find "." -type f -links +1 -printf "%i %pn" | 
  while read working_inode working_on
do
    find "$SOURCE_DIR" -type f -links +1 -printf "%i %pn" | sort -nk1 | 
      while read inode file
    do
        if [[ $inode == $working_inode ]]; then
            ln -vsf "$file" "$working_on"
        fi
    done
done

Odkazy +1 –> Najdou všechny soubory, které mají VÍCE než 1 odkaz. Soubory s pevným odkazem mají počet odkazů alespoň dva.


Linux
  1. Převést soukromý klíč Openssh na soukromý klíč Ssh2?

  2. Jak komprimovat symbolický odkaz?

  3. Jak přesunu relativní symbolický odkaz?

  1. Chyba ldconfig:není symbolický odkaz

  2. vytvoření symbolického odkazu:Chyba protokolu

  3. Proč můj symbolický odkaz nefunguje?

  1. Proměnné prostředí v symbolických odkazech

  2. Převeďte výstup ls na csv

  3. Jak odstranit symbolický odkaz na adresář?