是否可以将文件夹的特定文件扩展名列入白名单?
例如:我想将音乐专辑移动到一个文件夹,但我不希望通过禁止 *.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
如果rsync
target
您希望这两个目录是完全相同的除了那些图像文件)。