从非 Linux 文件系统复制文件时,自动为某些文件类型设置正确的权限

从非 Linux 文件系统复制文件时,自动为某些文件类型设置正确的权限

我想要这个的主要原因是我大量使用dircolors,尤其是ls --color=auto.例如,每当.mp3从 NTFS 复制文件时,它都会设置权限,umask 022这在大多数现代发行版中应该是标准值。然而,对于音频文件来说,这是没有意义的:由于它们的权限设置为755( rwxr-xr-x),它们将获得与音频文件相同的颜色。可执行的 shell 脚本,虽然我真的很想为真正的可执行文件保留这种颜色。这是不是视窗;甚至x为所有者/组/其他设置的权限您不能指望在./track1.mp3终端中工作,因此它会尝试选择默认的控制台播放器。

所以我想只umask声音的文件,即任何文件(如 .mp3、.wav、.ogg 等)始终将其模式设置为644,而将所有其他文件复制到此位置的默认模式umask022

有什么办法可以做到这一点吗?
(注意:cp --preserve也不会保留 NTFS 上的原始权限,因为 NTFS 对 *NIX 权限系统一无所知。)

答案1

您可以使用自己的用户定义命令的脚本cp来检查文件扩展名并chmod适当地使用...

你可以做一些简单的事情,比如:(使用 install 而不是 cp chmod 按照@fd0。无论如何,这更聪明。)

#!/bin/bash

args=("$@")
dest="${args[@]:(-1)}"
unset args[${#args[@]}-1]

if [ ! -d "$dest" ]; then
    echo "Please specify a destination directory as the final argument."
    exit 1
fi

for file in "${args[@]}"; do
    if [ "$file" == *".mp3" ] || [ "$file" == *".wav" ] || [ "$file" == *".ogg" ];  then
        install -m644 "$file" "$dest"
    else
        install -m755 "$file" "$dest"
    fi
done

exit 0

答案2

我会使用安装工具从 NTFS 复制。

install -m644 file1 ... fileN destination_directory

相关内容