这是一种可能的解决方案,只需运行
mkdir "./onlylinkedfiles" && cd "./onlylinkedfiles"
tar -ch "../symlinks" | tar -x --strip-components=1
并且您只有../symlinks/
在当前目录中符号链接的所有文件和目录。
与一些自动化相同:
cd "delete_here"
f="../symlinkshere"; mkdir ../temporary && pushd ../temporary && tar -vch "${f}" | tar -x --strip-components=1 && rm -rf "`dirs +1`" && cd .. && mv temporary "`dirs +1`" && popd
之后,当前目录仅包含在../symlinkshere/
.
让我们分解一下:
# Specify directory where symlinks are:
f="../symlinkshere";
# Create temporary directory:
mkdir ../temporary &&
# Remember current and change cwd to temporary folder:
pushd ../temporary &&
# Copy all symlinked files and directories to cwd:
tar -vch "${f}" | tar -x --strip-components=1 &&
# Remove directory where we been when pushd called:
rm -rf "`dirs +1`" &&
# Cd out of temporary dir:
cd .. &&
# Rename temporary to original cwd
mv temporary "`dirs +1`" &&
# Go back to path where we started:
popd
这是易于使用的shell脚本:
它适用于当前目录并接受一个参数,即符号链接的路径。
cd /path/to/clean
replacebylinks.sh /here/is/symlinks/
文件:~/bin/replacebylinks.sh
#!/bin/bash
tmp="`mktemp -d`"
sourced="`readlink -f ${1}`"
workd="`pwd -P`"
cd "${tmp}"
tar -vchC "${sourced}" . | tar -xv --strip-components=1
rm -vrf "${workd}"
cd ..
mv -v "${tmp}" "${workd}" && cd "${workd}"
一些注意事项:
-v
如果您认为输出过多,可以从命令中删除
详细开关。-
最好在
tar -chC "source" .
没有将-C source
整个源目录树保留在目标位置的情况下使用。对于绝对路径,这从/
根开始。