将目录中的文件扩展名列入白名单?

将目录中的文件扩展名列入白名单?

是否可以将文件夹的特定文件扩展名列入白名单?

例如:我想将音乐专辑移动到一个文件夹,但我不希望通过禁止 *.png、*.jpg 等来传输封面艺术,...

答案1

您可以在复制时进行过滤,例如在复制脚本中。或者您可以在复制操作后应用过滤器,删除不需要的内容允许或需要。

答案2

问题肯定是更广泛的比问题更重要,所以答案可能会有所不同。

最初,类Unix系统不知道文件扩展名的概念,尽管有些软件可以识别扩展名以适应其操作。

此外,一个路径名扩展必须匹配位于文件系统(分层文件系统)中指定级别的现有文件或目录。

mv可以移动整个目录层次结构,因此mv也可以模糊地移动位于匹配目录中的文件。

一个简单的解决方案是删除所需文件的读取权限以防止它们被复制。

prompt% cp -vr album /tmp
'album/' -> '/tmp/album'
'album/song.mp3' -> '/tmp/album/song.mp3'
'album/covert.png' -> '/tmp/album/covert.png'
 cp: cannot open 'album/covert.png' for reading: Permission denied
prompt% ls -l album/covert.png
--w-r--r-- user user 8 Sep 07:27 album/covert.png 

除受保护读取的文件外,文件将在目标目录中传输。

答案3

解决这个问题的简单方法是复制所有内容,然后删除不需要的文件。

使用rsync将整个source目录结构复制到target,然后find删除不需要的文件target

rsync -a source/ target

find target -type f \( -name '*.jpg' -o -name '*.png' \) -delete

一种更简化的方法是使用过滤功能来rsync不传输您不需要的文件:

rsync -a --exclude='*.png' --exclude='*.jpg' source/ target

在这两种情况下,--delete如果您想删除源目录中不存在的文件(--delete-excluded如果rsynctarget您希望这两个目录是完全相同的除了那些图像文件)。

相关内容