当我今天访问我的 Ubuntu 16.04 服务器并想要删除文件“test2”时,它根本没有被删除!
我用过
rm test2
Run Code Online (Sandbox Code Playgroud)
也
rm -f test2
Run Code Online (Sandbox Code Playgroud)
但它仍然没有删除它,您可以在这里阅读:
root@icinga:~# ls
basket desd.save packages scripts src test2 test5 unused
root@icinga:~# rm test2
root@icinga:~# ls
basket desd.save packages scripts src test2 test5 unused
root@icinga:~# rm -f test2
root@icinga:~# ls
basket desd.save packages scripts src test2 test5 unused
Run Code Online (Sandbox Code Playgroud)
我也尝试过删除其他文件,但没有成功!
我是“test2”的所有者,使用ls -la test2
你可以看到我有读写这个文件的权限!
root@icinga:~# ls -la test2
-rw-r--r-- 1 root root 9 Nov 11 20:33 test2
Run Code Online (Sandbox Code Playgroud)
使用which rm
它说/bin/rm
。
root@icinga:~# which rm
/bin/rm
Run Code Online (Sandbox Code Playgroud)
而且也不\rm …
昨晚我有一个脚本有点疯狂,并在凌晨3点到凌晨3点30分之间创建了一堆目录.是否有一个快速的一个衬垫,将打猎这些并为我删除它们?
我的代码如下 -
#!/usr/bin/env python
import time, glob, os, sys
from datetime import date, timedelta
try:
dpath = sys.argv[1]+"/"
except:
print "usage: " + sys.argv[0] +" <dir_path_to_purge_files>"
sys.exit(1)
print dpath
day_minus_mtime = time.mktime(date.today().timetuple())
g = glob.glob(dpath+"*")
for f in g:
try:
if day_minus_mtime > os.path.getmtime(f):
os.remove(f)
print "Removed: "+f
except OSError, e:
print "Not able to Remove: "+f , e
Run Code Online (Sandbox Code Playgroud)
我相信 os.remove(file) 相当于 linux 中的“rm文件”。
我想知道“rm -f file”的等效函数。强行删除文件或强行从目录中取消链接文件路径。
上面的代码也试图清除比今天更旧的文件。我有一种情况,文件没有被删除,因为它由于所有权而被“写保护”。但是当我对同一个文件使用“rm -f”时;它正在被删除。
我认为最好问一个问题,即使这听起来很愚蠢
rm -d
和rm -R
命令有什么区别?根据rm
命令的手册页:
rm -d
尝试删除目录以及其他类型的文件.rm -R
尝试删除以每个文件参数为根的文件层次结构.-R选项表示-d选项.现在,我知道最后的陈述(-R
暗示-d
),这似乎可以回答我的问题.但是,我仍然想知道为什么两个命令标志首先存在,如果他们认为它们的相同之处.
此外,因为我仍然在学习Bash,我认为最好知道哪个选项是Bash程序员(传统上)的首选,以及为什么.
我正在尝试为debian
包编写维护者脚本.假设我有一个目录结构如下:
application/
----application/file1.txt
----application/file2.txt
----application/config
--------application/config/c1.conf
--------application/config/c2.conf
----application/logs
--------application/logs/l1.txt
--------application/logs/l2.txt
----application/src
--------application/src/static/
------------application/src/static/js
------------application/src/static/css
--------application/src/s1.py
--------application/src/s2.py
----application/lib
--------application/src/js/
--------application/src/css/
Run Code Online (Sandbox Code Playgroud)
现在我想删除除所有文件/文件夹config
,并logs
(在这种情况下,src
和lib
文件夹,file1.txt
以及file2.txt
文件).我PWD
目前是appliaction/
dir 的父母(也就是说,我可以application
在我看到PWD
).
我应该使用什么命令(小的bash script
会很棒)?(我尝试了rm -rf
一些选项,但错误地删除了其他文件,所以我想在尝试其他任何事情之前知道正确的答案!)
所以我在这里查看了有关删除超过14天的目录的每个脚本.我编写的脚本使用文件但由于某种原因它不删除目录.所以这是我的脚本.
#!/bin/bash
find /TBD/* -mtim +1 | xargs rm -rf
Run Code Online (Sandbox Code Playgroud)
所以这段代码成功删除了TBD中的FILES,但它留下了两个目录.我检查了它们的时间戳,根据时间戳,它们是自上次修改后至少2天.特别是12月16日16:10所以我无法弄清楚这一点.我运行的crontab每分钟运行一次并记录日志,它只显示日志.
+ /scripts/deletebackups.sh: :2:BASH_XTRACEFD=3xargs rm -rf
+ /scripts/deletebackups.sh: :2: BASH_XTRACEFD=3find /TBD/contents TBD/contents -mtime +1
Run Code Online (Sandbox Code Playgroud)
我使用内容,因为内容实际上是我们的pxe服务器中的人名.我检查了这两个目录中的每个文件和文件夹,它们的时间戳和它们应该是的父目录相同,但它仍然没有删除.
这可能是权限吗?我使用sudo nano deletebackups.sh编写了脚本当我在最左边的TBD下键入ls时,它显示了两个不会删除的目录中的drwxr-xr-x 3 hscadministrator root 4096 DEC 16 16:10.我对这些字母的含义并不过分熟悉.
我已经尝试过的这段代码的其他迭代
find /TBD/* -mtime +1 rm -r {} \;
Run Code Online (Sandbox Code Playgroud) 我试图删除所有.dot
文件,除了.git
和所有*.js
除一人外exception.js
,但我失败
git clone git@github.com:iamstarkov/rimraf-test.git
cd rimraf-test
Run Code Online (Sandbox Code Playgroud)
npm test # it fails
Run Code Online (Sandbox Code Playgroud)
有谁能够帮助我?
当我做
rm file.txt
Run Code Online (Sandbox Code Playgroud)
要么
rm *.txt
Run Code Online (Sandbox Code Playgroud)
我被提示输入每个文件,因为我没有指定-f
选项rm
.
但是当我这样做时:
find . -type f -name '*.txt' | xargs rm
Run Code Online (Sandbox Code Playgroud)
在没有确认的情况下删除文件.
这背后的逻辑是什么?是否有可能在某些文档中找到原因?我无法解释为什么会出现这种情况.
/path/to/dir
我正在尝试使用该命令删除目录rm -rf
。不幸的是我得到了错误
rm: cannot remove '/path/to/dir/.nfsdda293a660f276ca0000000a': Device or resource busy
Run Code Online (Sandbox Code Playgroud)
经过一番研究后,我意识到我需要找到哪个进程正在使用该文件,然后才能删除它:
lsof /path/to/dir/.nfsdda293a660f276ca0000000a
Run Code Online (Sandbox Code Playgroud)
这将返回与进程关联的 PID:
COMMAND PID
python 28594
Run Code Online (Sandbox Code Playgroud)
然后我杀死 PID 并再次尝试删除,但我仍然收到最初的错误。
如何强制/path/to/dir
脚本内的脚本自动删除,无需人工干预?