我正在尝试编写一个非常简单的Bash shell脚本,该脚本将在特定目录中cd,它将删除除少数选定的文件和目录之外的所有文件和目录,然后cd回原始目录.
我的代码是:
#!/bin/bash
cd /path/to/desired/directory
shopt -s extglob
rm !\(filename1\|filename2\|filename3\) -rf
cd -
Run Code Online (Sandbox Code Playgroud)
我已经尝试了许多不同的方式来写符号"("和"|",单或双引号或反斜线但是毫无效果.注意,.shopt -s extglob
和rm !(filename1|filename2) -rf
外部的脚本做工精细.
可能是我提出了一个我无法看到的标准和基本的bash脚本错误,但经验即将到来......
有什么建议!?提前致谢.
到目前为止,我已经想出了如何使用find递归解压缩所有文件:
find . -depth -name `*.zip` -exec /usr/bin/unzip -n {} \;
Run Code Online (Sandbox Code Playgroud)
但是,我无法弄清楚如何在提取后一次删除一个zip文件.在-a -exec中添加rm*.zip会在提取之前删除每个目录中的大多数zip文件.通过包含rm命令的脚本(使用-i启用测试)管道导致找不到任何*.zips(或者至少是它所抱怨的).当然,在许多文件名中都有空格,但此时在sed命令中添加_的语法有点超出我的意思.谢谢您帮忙!
我想以递归方式从特定目录中删除文件.所以,我用过
find . -wholename "*.txt" -delete
Run Code Online (Sandbox Code Playgroud)
我们也可以使用删除文件
rm -rf *.txt
Run Code Online (Sandbox Code Playgroud)
使用rm
和删除文件有什么区别find
?
.git
我有一个 git 存储库,Rift
我正在尝试删除它。在尝试运行时rm -rf
,我收到错误:rm: cannot remove 'Rift/.git/objects/pack': Directory not empty
。
当我导航到目录树的底部时,我发现一个隐藏文件,名为 ,.fuse_hidden
后跟一串数字和字母(可能是十六进制)。我可以手动删除此文件,但一旦删除它,就会在其位置创建另一个附加了不同数字和字母字符串的文件。
我已经尝试过rm .git/objects/pack/* && rm -rf .git
,,sudo rm -rf .git
和,chmod -w .git/objects/path
但killall git
都没有成功。
可能重复:
在Git仓库中恢复已删除的文件
我的Git,master和newFeature中有两个分支.在分支newFeature,我首先在终端中物理删除了fileA,然后在Git中删除了
git rm fileA
Run Code Online (Sandbox Code Playgroud)
随后,我跑了
git add .
git commit
Run Code Online (Sandbox Code Playgroud)
现在,我需要的fileA一次.通过简单地切换到分支主机,我知道我可以将其取回.我显然是错误的,因为我无法找到的fileA.
如何使用Git获取fileA?
可能重复:
无法删除终端中的特殊命名文件
我觉得很傻,但是如何在linux中删除一个名为--preserve-permissions
?的文件?
我试过了:
rm "--preserve-permissions"
and
rm "\-\-preserve-permissions"
Run Code Online (Sandbox Code Playgroud)
两者都不起作用.谢谢.
我的脚本完成后我可以删除该文件,但是当它正在运行时我无法触摸它,即使在一个之后fclose()
.这是我正在尝试使用的代码:
$Files = glob("$_SERVER[DOCUMENT_ROOT]/files/*.csv");
$File = fopen($Files[0], "r");
//while (($Data = fgetcsv($File)) !== false) {...
$i = 0;
while (is_resource($File)) {
$i && sleep(1);
echo "Closing handle.\n";
fclose($File);
if (++$i > 5)
die("Could not close handle.");
}
foreach ($Files as $File) {
$i = 0;
while (file_exists($File)) {
$i && sleep(1);
echo "Deleting file.\n";
@unlink($File);
echo 'www-data@debian:~$ ', $Command = "rm -f '$File' 2>&1", "\n", shell_exec($Command);
if (++$i > 5)
die("Could not delete the file.");
}
}
Run Code Online (Sandbox Code Playgroud)
正如你所看到我试图删除它 …
在脚本出错后,我最终得到了一个名称以短划线' - '开头的文件
-
我到目前为止尝试过:
-myfile.txt
Run Code Online (Sandbox Code Playgroud)
你有什么主意吗 ?
谢谢
我认为rm按字母顺序删除文件,但显然不是在我执行之后.
那么,命令rm执行的顺序是什么?
当我今天访问我的 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 …