linux 删除目录中与特定文件名不匹配的文件,没有扩展名[已关闭]

v440hwme  于 2023-05-16  发布在  Linux
关注(0)|答案(3)|浏览(154)

**关闭。**这个问题是not about programming or software development。目前不接受答复。

这个问题似乎不是关于a specific programming problem, a software algorithm, or software tools primarily used by programmers的。如果你认为这个问题与another Stack Exchange site的主题有关,你可以留下评论,解释在哪里可以回答这个问题。
6天前关闭。
Improve this question
我的目录看起来像这样:

  • test.png
  • test2.png
  • test.jpg
  • test2.jpg
  • test.jpeg
  • test45.jpeg
  • test.gif
  • test3.gif

现在我想运行一个linux命令,删除所有不完全是4个字符的文件,而不考虑扩展名。
生成以下目录:

  • test.png
  • test.jpg
  • test.jpeg
  • test.gif

你知道怎么做吗

ia2d9nvy

ia2d9nvy1#

使用extglob选项:

shopt -s extglob
rm !(?????(.*([^.])))
iklwldmw

iklwldmw2#

extglob

shopt -s extglob
echo rm !(????.*)

删除echo以真实的删除。

g6baxovj

g6baxovj3#

使用find查找所有格式为????.*(4个字符加一个句点再加可变数量的字符)的文件:

$ find . -type f -name "????.*"
./test.gif
./test.jpeg
./test.jpg
./test.png

否定这种方法(即,查找除????.*以外的所有文件):

$ find . -type f ! -name "????.*"
                 ^ ---- negate next option
./test2.jpg
./test2.png
./test3.gif
./test45.jpeg

应用-exec/rm

find . -type f ! -name "????.*" -exec rm {} \;

或者将结果通过管道传输到xargs/rm

find . -type f ! -name "????.*" -print0 | xargs -r -0 rm

如果你有子目录,那么上面所有的都将对所述子目录中的文件应用find/rm;要将rm操作限制到当前/父目录:

find . -maxdepth 1 -type f ! -name "????.*" -exec rm {} \;
       ^^^^^^^^^^^

相关问题