gpt4 book ai didi

bash - 使用 bash 删除目录中未链接的所有文件夹

转载 作者:行者123 更新时间:2023-12-05 00:33:30 24 4
gpt4 key购买 nike

我有一个任务要求我删除目录中所有没有符号链接(symbolic link)的文件夹,只保留符号链接(symbolic link)的文件夹和符号链接(symbolic link)。

例如,如果我有 3 个资源:link、linked_folder 和 unlinked 文件夹。 link 和 linked_folder 将被保留。

目前我已经设法得到这段代码,它适用于我们现有的文件命名结构,但我想知道是否有更简洁的解决方案?

protected_folders=`ls -l | awk '/^l/ {printf $10}' | tr '/' '|'`;
symlinks=`ls -l | awk '/^l/ {print $8}' | tr "\n" "|"`;
protected_resources=$protected_folders$symlinks;
protected_resources=${protected_resources:0:${#protected_resources}-1};
folders_to_delete=`ls | grep -v -E "$protected_resources"`;
echo $folders_to_delete | tr '\n' ' ' | tr ' ' '\000' | xargs -0 rm -rf

我知道上面的命令可以在一行中完成,但是我把它分开了,因为我被要求让它更“可读”。

如有任何帮助,我们将不胜感激。

最佳答案

将符号链接(symbolic link)及其目标移动到新目录,然后用新目录替换旧目录可能更容易。

警告:这只是一个粗略的草图,旨在为您提供思路。 [更新:清理并使其不像伪代码]

# Make an empty directory to hold the symlinks and targets
# that you want to keep
DIR_TO_CLEAN=/the/directory/to/clean/up
TMP_DIR=$(mktemp -d)

for x in $DIR_TO_CLEAN/*; do
# Move each symlink and its target to the new directory
[[ -h $x ]] && mv $x $(readlink -f $x) $TMP_DIR
done

# FIRST!!!, confirm that $TMP_DIR has everything you want to keep,
# and $DIR_TO_CLEAN has nothing you want to keep
rm -rf $DIR_TO_CLEAN
mv $TMP_DIR $DIR_TO_CLEAN

关于bash - 使用 bash 删除目录中未链接的所有文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10452804/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com