仅当 *nix 中存在非点文件时才删除点文件

仅当 *nix 中存在非点文件时才删除点文件

我正在将文件从 FAT32 文件系统移动到 Mac 上的 EXFAT 文件系统。我的理解是 FAT32 不支持扩展文件属性,因此它为每个文件创建了点文件。

但是,既然我已经将所有内容复制到了 exFAT 文件系统中,我想删除这些点文件。有没有办法复制点文件,但前提是同一目录中存在非点文件(这样我就可以避免删除作为配置文件的点文件)。

这将在 Mac CLI 上进行。

谢谢!

答案1

创建可执行的 shell 脚本:

#!/bin/bash
for dotfile ; do
    path=${dotfile%/.*}
    name=${dotfile##*/.}
    if [[ -f $path/$name ]] ; then
        rm "$dotfile"
    fi
done

然后从要清除的目录顶部运行:

find -name '.*' -exec rm-dotfiles.sh {} +

rm-dotfiles.sh脚本的名称在哪里。

答案2

仅当匹配的非点文件存在时才删除点文件与删除所有非点文件的匹配点文件是一回事。所以:

for f in *; do rm -f ".$f"; done

请注意,*上述操作通常仅匹配非点文件,除非您已经完成shopt -s dotglob(在这种情况下最好在发出命令之前重置)。

目录递归版本将是:

for f in $(find -type f -name '[^.]*');do rm -f "$(dirname $f)/.$(basename $f)";done

(名称模式find不包括点文件)

相关内容