Symlink
使用萬用字元創建符號連結
我有多個具有相同目錄層次結構的硬碟驅動器,例如:
/media/sda/dir1 /media/sda/dir2 ... /media/sdb/dir1 /media/sdb/dir2
兩個具有相似名稱和相似目錄名稱的硬碟。我想在每個硬碟上創建指向 dir1 和 dir2 的單獨符號連結。我發現最簡單的方法是使用
cp -sR
:cp -sR /media/sd*/dir1 /somedir/dir1 cp -sR /media/sd*/dir2 /somedir/dir2
但是,這會在 /somedir 中創建新目錄,這會產生各種副作用,例如,目錄時間戳是無用的。
如何創建名為 dir1 和 dir2 的符號連結,它們連結到 /media/sd*/dir1 和 /media/sd*/dir2?文件會定期添加到硬碟驅動器中,因此我需要定期執行這些命令。
您可能想要這樣做:
for dir in dir1 dir2 do [[ ! -d /somedir/$dir ]] && mkdir /somedir/$dir find /media/sd*/$dir -type f -exec bash -c \ '[[ ! -f /somedir/'$dir'/$(basename $1) ]] && ln -s $1 /somedir/'$dir'/' foo {} \; done
這會在 /somedir/dir1/ (resp. dir2) 中創建指向 /media/sd*/dir1 (resp. dir2) 下的所有文件的符號連結。此腳本不保留源目錄下可能存在的層次結構。
編輯:如果您希望將所有連結放在一個目錄中,這裡有一個稍微修改過的版本:
[[ ! -d /somedir/data ]] && mkdir /somedir/data find /media/sd*/dir[12] -type f -exec bash -c \ '[[ ! -f /somedir/data/$(basename $1) ]] && ln -s $1 /somedir/data/' foo {} \; done
這將創建
/somedir/dir1/*
指向/media/sd*/dir1/*
.mkdir /somedir/dir1 ln -sf /media/sd*/dir1 /somedir/dir1
如果一個文件或目錄存在多個,
/media/sd*/dir1/
則連結將指向最後一個,例如,如果您有:/media/sda1/dir1/Movies /media/sda1/dir1/Pictures /media/sdb1/dir1/Movies /media/sdb1/dir1/Data
你會得到:
/somedir/dir1/Movies -> /media/sdb1/dir1/Movies /somedir/dir1/Pictures -> /media/sda1/dir1/Pictures /somedir/dir1/Data -> /media/sdb1/dir1/Data
不確定這是否是您想要的。
在我看來,
unionfs
安裝/media/sd*
比符號連結更能滿足您的目的。