如何移动子文件夹中除某些文件以外的所有文件

问题描述 投票:0回答:1

我通常使用nas上目录/Public/Downloads中的filezilla下载。

下载队列完成后,我制作了一个由filezilla执行的脚本,因此我所有的下载都移到了/Public/Downloads/Completed。我的目录/Public/Downloads也包含两个文件和三个不能移动的目录。

folder.jpg
log.txt
Temp
Cache
Completed

我尝试过此命令:

find /Public/Downloads/* -maxdepth 1 | grep -v Completed | grep -v Cache | grep -v Temp | grep -v log.txt | grep -v folder.jpg | xargs -i mv {} /Public/Downloads/Completed

此功能适用于下载的文件和文件夹,它们不带特殊字符:它们已移至/Public/Downloads/Completed但是,当出现 à或其他特殊内容时,xarg会抱怨不匹配的单引号;缺省情况下,除非使用-0选项,否则引号对xargs来说是特殊的。

我自己搜索了一个解决方案,但没有找到适合我的需要的东西,结合了find,grep和xargs的文件和目录。

我必须如何修改命令?

我通常使用nas上的/ Public / Downloads目录中的filezilla下载。当下载队列完成时,我制作了一个由filezilla执行的脚本,因此所有下载都移至/ Public / ...

bash grep find xargs exclude
1个回答
1
投票

您不需要grep和xargs。只需使用否定的-name primaries排除特定条目。

find /Public/Downloads \
  -maxdepth 1          \
  -mindepth 1          \
  ! -name folder.jpg   \
  ! -name log.txt      \
  ! -name Cache        \
  ! -name Completed    \
  ! -name Temp         \
  -exec mv -t /Public/Downloads/Completed {} +
© www.soinside.com 2019 - 2024. All rights reserved.