我最近需要删除父目录中约 40 个目录中的所有文件,而不删除目录本身。我最终手动这样做了,但是有没有更有效的方法来做到这一点?即,有没有一个linux命令可以做到这一点?
为了更清楚地理解我的意思:
HomeDirectoryName --> subdirectoryName --> 4个模拟信息文件
我有上面的路径,除了有 40 个子目录,每个子目录有 4 个模拟文件。我需要删除所有模拟信息文件而不删除“subdirectoryName”目录。
这可能是不可能的,因为我到处搜索了大约一个小时,最后决定手动完成。
我做了类似的事情:
$ cd /A/B/
$ rm -rf ./*
$ rm -rf ../**
Run Code Online (Sandbox Code Playgroud)
由于网络问题,我的系统与 Ubuntu 断开了连接。当我回来时,文件夹中没有文件或文件夹/A
。
如何制作一个 bash 脚本,该脚本在运行时将检查文件/文件夹是否存在以及文件/文件夹是否存在并将其删除?
我和这个问题有同样的问题如何从文件夹中删除除少数文件夹之外的所有文件/文件夹?几次。这就是我想为命令 rmnot 自己编写脚本的原因。如有必要,即使使用通配符,它也应该使用任意数量的文件,并删除同一目录中除这些文件之外的任何内容(非递归)。典型的例子是:
rmnot *tex *bib *png
Run Code Online (Sandbox Code Playgroud)
我的脚本可以工作,但是由于我没有经验并且想以正确的方式学习它,有没有更优雅的方法来编写这个脚本?
#!/bin/zsh
insert="-name . -or -name .."
for i in {1..$#}; do
insert="$insert -or -name ${(P)i}"
done
insert="\( $insert \)"
eval "find -not $insert -exec rm {} \;"
Run Code Online (Sandbox Code Playgroud)
PS:我必须使用 ZSH,因为${(P)i}
我认为其他任何东西都可以在 bash 中使用。
======优化版本======
#!/bin/bash
insert="-name . -or -name .."
for i; do
insert="$insert -or -name $i"
done
insert="\( $insert \)"
find -maxdepth 1 -not $insert -delete
Run Code Online (Sandbox Code Playgroud) 我有以下文件和目录配置:
-Parent_dir
|-delme_dir
|-delme_file
|-aFile
|-sub_dir
|-delme_dir
|-delme_file
|-aFile
|-sub_dir
|-delme_dir
|-delme_file
|-aFile
|-sub_dir2
|-delme_dir
|-delme_file
|-aFile
Run Code Online (Sandbox Code Playgroud)
是否有一个命令可以从 Parent_dir 使用来递归删除所有delme_dir 目录和delme_file 文件?
我想从我的目录中删除在 04/29/2018 下午 4:00 之前创建的文件。
谢谢
我使用的是 Ubuntu-Mate 20.04,我丢失了主文件夹的大部分内容。我认为这可能是由于错误地使用了 sudo 的 \xe2\x80\x9crm\xe2\x80\x9d 命令,但不确定是否可能是其他原因。
\n我解释一下:我试图删除 /home/user2 上的文件夹( \xe2\x80\x9ctargetfolder (something)\xe2\x80\x9d )及其内容,同时以 user1 身份登录(user1 具有 sudo 权限)。所以我做了:
\nsudo rm -r /home/user2/targetfolder (something)/ \n
Run Code Online (Sandbox Code Playgroud)\n起初 rm 由于括号给出了一些错误消息 - 我的意思是:( ) -,所以我用 * 替换了文件夹 \xe2\x80\x99s 名称的一部分,然后执行了:
\nsudo rm -r /home/user2/targetfolder */\n
Run Code Online (Sandbox Code Playgroud)\n注意:由于空格('targetfolder *'),我可能使用引号作为文件夹名称,尽管在终端中注册的最后一个命令没有引号。
\n据我了解, rm 应该只删除 user2 主文件夹中名称以 \xe2\x80\x9ctargetfolder\xe2\x80\x9d 开头的任何文件夹,但它似乎已经删除了 user2 主文件夹的主要部分用户1。我补充说,因为我不清楚 rm 是否正在工作,所以我关闭了终端杀死,我猜,这个过程。
\n为了以防万一,user1 和 user2 主文件夹都使用 ecryptfs 进行加密(要在 /home/user2 删除的文件夹位于 .Private 之外,因此未加密)。
\n所以,我的问题是我使用的 rm 命令是否可以删除 user1 主文件夹的内容(甚至影响系统)。
\n我最近备份了丢失的内容,但我想确保这不是由于 rm 命令以外的其他问题造成的。 …
我不小心创建了一个名为 ??q:q 的文件,但无法删除它。
rm '??q:q'
或者rm '\?\?q\:q'
(为了逃避?)说No such file or directory
另一个有趣的事情:在ls
它显示名称为??q:q
. 但是当我输入时rm <tab><tab>
说^?^?q:q
(我也试图用这个名字删除它)
只是想知道如何使用终端删除名为“ -f ”、“ -r ”或其他名称的目录/文件。
我试图删除包含文件的目录,但permission denied
在 Ubuntu 22.04.1 上出现错误。
我已更改777
目录和父目录的权限,但仍然收到错误。
$ sudo rm *.*
rm: cannot remove 'Real Economy v1.5.1-4267-1-5-1-1588544476': Permission denied
rm: cannot remove 'Witcher 3 input.settings file backup for 1.32-5844-1-32-1626358844': Permission denied
Run Code Online (Sandbox Code Playgroud)
包含我尝试删除的目录/文件的目录是 Brave 浏览器和 Firefox 的默认下载目的地。它位于系统磁盘 (SSD) 上。浏览器也不允许我更改下载目的地,这很奇怪。这些文件在此处下载,适用于 Windows(《巫师 3》的模组)。
另一个奇怪的事情是这些是提取的档案(7-zip 文件等)。
我可以删除原始存档文件,但是一旦提取它,我就无法删除提取的目录/文件。
我试图在 WSL 中的 bash 中附加到文本文件(使用>>
运算符)。不幸的是,由于我是初学者,而不是附加到文件,而是使用>>
“文本”作为文件名创建了一个新文件,并且 Windows(GUI)和 Ubuntu(rm
命令)似乎都无法删除该文件目录(即使使用命令时也会显示dir
)。
Windows 图形用户界面:
Windows 错误代码:
重击:
root@DESKTOP-IA030GJ:/# cd home
root@DESKTOP-IA030GJ:/home# dir
English_Class Finished_Projects Keeping.txt Random_Password_Generator_Project \\n\\n\ -----Changes\ onion_project pythonwork
root@DESKTOP-IA030GJ:/home# ls --quoting-style=shell
English_Class '\n\n -----Changes '
Finished_Projects onion_project
Keeping.txt pythonwork
Random_Password_Generator_Project
Run Code Online (Sandbox Code Playgroud)
我想知道擦除 LUKS 标头(主要是活动启动分区/磁盘上的标头)是否像执行 a 一样简单,sudo rm -rf / --no-preserve-root
或者我是否需要执行不同的命令。会是哪一个呢?
预先感谢您的任何见解!
警告:
为避免灾难性的数据丢失,读者不应运行此程序,也不应对其进行任何更改!
我想了解此命令的作用: sudo rm -rf/*
rm ×13
command-line ×9
bash ×3
scripts ×2
coreutils ×1
date ×1
directory ×1
files ×1
konsole ×1
luks ×1
permissions ×1
wildcards ×1
windows-subsystem-for-linux ×1
zsh ×1