Bash删除除某些文件夹外的所有文件夹

Bash删除除某些文件夹外的所有文件夹,bash,Bash,我有一个具有以下结构的目录: main/ Antispam/res/values/ strings.xml plurarls.xml arrays.xml Backup/res/values/ strings.xml plurarls.xml arrays.xml 等等 Antispam和Backup中还有其他文件夹,但我不需要它们。我只想让values文件夹包含三个XML文件(st

我有一个具有以下结构的目录:

main/
    Antispam/res/values/
        strings.xml
        plurarls.xml
        arrays.xml
    Backup/res/values/
        strings.xml
        plurarls.xml
        arrays.xml
等等


Antispam
Backup
中还有其他文件夹,但我不需要它们。我只想让
values
文件夹包含三个XML文件(
strings.XML
plurarls.XML
arrays.XML
)。我该怎么做呢?

请在尝试之前备份您的数据

如果您不关心空dir(或者您不关心用一个命令完成所有操作),我将执行以下操作:

find ! -name strings.xml ! -name plurarls.xml ! -name arrays.xml -type f -delete
如果您关心空目录:

find -type d -print0 | xargs -0 rmdir -p

这就是我要做的。基本上,只需找到不包括父文件夹的文件夹,然后将它们发送给oblivion即可

find main/Antispam/res/values/ '!' -path main/Antispam/res/values/  -type d | xargs rm -f -r $1
find main/Backup/res/values '!' -path main/Backup/res/values  -type d | xargs rm -f -r $1

希望它对你有用!:)

如果在父目录下运行此命令:

find .  -regex '.*backup.*' 
你会有这样的想法:

./backup
./backup/res
./backup/res/value
./backup/res/value/00.xml
./backup/res/value/02.xml
./backup/res/value/01.xml
然后您可以通过
-not

find . -not -regex '.*backup.*' 
当然,您可以使用
-typed
和literal
/
使其更加具体

find . -type d -not -regex './backup.*'
然后对输出执行任何您喜欢的操作

这是我的工作:

ale8530@vmi81507:~/Scrivania/APK Tools Linux master/working$find-regex.*res/values/strings.*'

./WaliLive/res/values/strings.xml./SystemAdSolution/res/values/strings.xml./SampleExtAuthService/res/values/strings.xml./DocumentsUI/res/values/strings.xml./CaptivePortalLogin/res/values/strings.xml./ExternalStorageProvider/res/values/strings.xml./MiuiCompass/res/values/strings.xml./CloudBackup/res/values/strings.xml./BackupRestoreConfirmation/res/values/strings.xml./AntHalService/res/values/strings.xml./MiuiSuperMarket/res/values/strings.xml./DownloadProvider/res/values/strings.xml./XiaomiAccount/res/values/strings.xml./SpacesCore/values/strings.xml./CdmaCallOptions/res/values/strings.xml

你能把这个输出复制到另一个导演吗 Y保持相同的输出

比如说

从-->./WaliLive/res/values/strings.xml到./WaliLive.apk/res/values/strings.xml


谢谢

这是一个非常糟糕的书面答案,我会尽我最大的努力来回答,但要努力改进:欢迎来到Stack Overflow!请出示你的问题。您应该至少包括您遇到问题的代码的大纲(但最好是a),然后我们可以尝试帮助解决特定问题。您还应该阅读。可以使用
-delete
而不是
|xargs rm
,除非有特定原因不这样做。我认为您省略了目录名-在任何谓词参数之前,find至少需要一个。根据Bash设置,
可以是元字符,因此我建议引用它。它不需要,只需将当前目录用作源目录即可+1对于引用建议,但我从未点击过您的脚本有效的案例,但保持文件夹为空,是否可能删除?@ale8530我已更新答案,如果有效,请将答案标记为已接受抱歉您的脚本未有效:)谢谢你的帮助我没有错,但这对我的工作没有任何影响:ale8530@vmi81507:~/Scrivania/APK Tools Linux master/working$find.-regex.*res/values/strings....'./WaliLive/res/values/strings.xml./SystemAdSolution/res/values/strings.xml能否将此输出复制到另一个控制器y?保持相同的输出?例如,从-->./WaliLive/res/values/strings.xml到./WaliLive.apk/res/values/strings.xmlThanks@ale8530可以,如果您的意思是:将输出保存为简单的日志/文本文件。只需使用
运算符重定向输出,此
将为您将输出发送到文件,而不是屏幕。
提示$find.>列表。txt
。如果不是您的意思,请澄清您的意思。我希望能够复制在另一个目录中找到的文件,保留起始目录,例如从-->。/WaliLive/res/values/strings.xml复制到./WaliLive.apk/res/values/strings。xm@ale8530.使用此语法--找到所需内容,然后通过管道将其传递到xarge命令以运行
cp
command;比如:
find…| xargs-I xxx echo xxx
测试并使用任何您喜欢的命令来代替
echo
我不确定您的意思!但首先删除您的答案。其次,请查看和。如果您有任何问题,请在我的答案中评论我。