
我有一個包含巨大文件的目錄(總計約 1TB),但我不想複製它們。但是,我想解決它們,因此將它們連結到我有權訪問的目錄層次結構(也稱為我創建的目錄層次結構)中會很方便。所以
/path/to/dirs/
foo
bar
baz/
tri
應該複製到
~/path/to/dirs/
foo -> /path/to/dirs/foo
bar -> /path/to/dirs/bar
baz/
tri -> /path/to/dirs/tri
答案1
使用 GNU:
cd ~/path/to/dirs || exit 1
find /path/to/dirs -type d -printf %P\\0 | xargs -0 mkdir -p
find /path/to/dirs -type f -print0 |
xargs -0 cp --symbolic-link --parents --target-directory=.
答案2
使用 GNU coreutils(即在非嵌入式 Linux 或 Cygwin 上):
cp -al /path/to/dirs ~/path/to/dirs
如果您cp
沒有該-l
選項,請進行第一遍建立目錄層次結構,然後進行第二遍建立符號連結:
find /path/to/dirs -type d -exec sh -c 'for x do mkdir "$HOME$x"; done' _ {} +
find /path/to/dirs ! -type d -exec sh -c 'for x do ln -s "$x" "$HOME$x"; done' _ {} +
如果您願意,可以將兩個通道合併為一個命令:
find /path/to/dirs -exec sh -c '
for x do
if [ -d "$x" ]; then
mkdir "$HOME$x"
else
ln -s "$x" "$HOME$x"
fi
done
' _ {} +
答案3
cp --no-dereference orig dest
這將在複製時保留符號連結。這是文檔:
-P, --no-dereference never follow symbolic links in SOURCE
-p same as --preserve=mode,ownership,timestamps