到目前为止我已经想到了这个。
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