如果找到扩展名则 cp 父目录否则 echo 未找到

如果找到扩展名则 cp 父目录否则 echo 未找到

到目前为止我已经想到了这个。

if ls -1 ~/Downloads/*.mkv >/dev/null 2>&1
then
        echo 1
else
        echo 0
fi

但我想要做的是将找到的文件的父目录复制到另一个位置。

我觉得我应该只使用 find 命令。

答案1

find如果路径包含空格,fede.evol 的答案将失败。或的输出ls 不应在命令替换中使用

处理所有文件名(带有换行符的路径除外)的正确方法是:

find /somewhere -name "*.mkv" -exec dirname {} \; | uniq | \
while IFS= read -r dir; do echo cp -- "$dir" /other/; done

这样,每个文件夹/somewhere都会被复制到/other/。请注意,结尾的斜杠是必需的,否则目标将始终被覆盖。

答案2

用于dirname FILE获取给定文件的目录名称。例如:

find DIRECTORY -name "*.mkv" -exec dirname {} \;

将为您提供 DIRECTORY 下所有带有 MKV 的目录。然后您可以传递它们uniq以避免重复,然后以防万一进行复制。

例如

cp -a `find DIRECTORY -name "*.mkv" -exec dirname {} \; | uniq` DESTDIR

相关内容