- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在编写一个 PHP 脚本来自动解压缩和扫描位于外部 USB 驱动器上的 tar.gz 存档,但我遇到了几个奇怪的问题。脚本找到存档后,它会尝试在 USB 驱动器上创建一个临时目录以将存档解压缩到其中。为了保证一个唯一的临时目录名称(因为这个脚本可能同时运行多次),我使用当前时间的 MD5 的随机 5 位部分来命名文件,如下所示:
$temp = "/media/$driveName/".substr(md5(microtime()), rand(0, 26), 5);
由于U盘没有挂载在服务器文件系统中,我无法使用PHP内置的文件管理命令(mkdir()、glob()等),只能通过终端与文件系统交互使用 exec() 或 shell_exec() 执行的命令。因此,为了实际创建具有上述名称的临时目录,我使用了一个基本的终端 mkdir 命令:
shell_exec("mkdir $temp");
接下来,我将存档解压缩到临时目录:
shell_exec("tar -xzf $archivePath -C $temp");
最后,在分析完存档后,我删除了临时目录及其内容:
shell_exec("rm -rf $temp");
但是,我遇到了两个奇怪的问题:
偶尔,可能每五次运行中就有一次,创建的临时目录名称已损坏。当使用 ls directory
显示时,它看起来像 06191v??????.????v???
。但是,当使用 Tab 键自动填充 cd
命令时,它会填充一个更长的字符串,例如 06191v\342\226\200\342\225\232.\342\211\2100v\342\226\200/
。我知道在将字符串传递给 shell_exec() 之前该字符串很好(我什至尝试使用 substr() 将其限制为正确的长度,但无济于事),并且第一个斜杠之后的一系列字符(所以从 342 开始)总是相同的,不管前五个字符是什么(前五个字符和斜杠之间的字符总是一个字母,但在其他方面是随机的)。然而,除此之外,我一头雾水。
出于某种原因,我用于删除脚本末尾临时目录的 shell_exec("rm -rf $temp");
只有在我执行它时才有效两次。如果我只执行一次,我会收到以下错误:rm: cannot remove '/media/FILESYSTEM/f3637': Directory not empty
,这本身就很奇怪,因为 -rf
应该覆盖这个错误。此行为也可以在服务器的命令提示符中复制。
我似乎无法在网上找到与这些问题中的任何一个相关的任何信息,所以我希望这只是我犯了一个愚蠢的错误,而不是我的安装或 USB 驱动器的问题。在此先感谢您的帮助!
编辑: 实际上我还有第三个问题,它可能与第一个问题有关。在运行 shell_exec("tar -xzf")
命令解压缩我的存档后,生成的目录总是 附加了一些奇怪的字符。例如,对于一个名为 BOOT 的压缩目录运行,解压后的目录在终端中显示为 BOOT??w??????.???w???
及其回显输出显示为 BOOT²w▀╚.∙wâ–€
。使用 tab 将 cd
命令填入此目录后,我得到一个具有几乎相同模式的字符串:BOOT\302\262w\342\226\200\342\225\232
。 99% 的情况下,这不会影响脚本的执行,但偶尔会导致脚本无法扫描目录。
2.\342\210\231w\342\226\200/
最佳答案
对于 #1,似乎有一些奇怪的角色进入了那里。
在我的机器上试过,它似乎可以工作:
<?php
for($x = 0; $x < 30 ; $x++)
shell_exec('mkdir ' . substr(md5(microtime()), rand(0, 26), 5));
sleep(1);
我将引号内的变量分开,然后用“.”加回去
-肯
关于PHP:shell_exec ("mkdir") 和 shell_exec("rm -rf) 的奇怪问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17303658/
我正在学习 git,但我对暂存和提交文件的不同方式感到困惑。为了解决这个问题,我使用了目录的比喻:工作目录、暂存目录、提交目录。 如果我rm 我的工作目录中的一个文件,它只会仅 从我的工作目录中删除它
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
在 Makefile 中,我读到: -rm -rf(而不是 rm -rf)。 Makefile 中行开头的第一个“-”是什么意思? 最佳答案 这意味着make本身将忽略来自rm的任何错误代码。 在 m
我正在使用此命令尝试删除一个非常大的文件夹中的所有 Thumbs.db 文件。我认为 -f 应该在不要求确认的情况下强制删除,但我仍然被提示在每个文件上输入“y”或“n”。 find "megapac
我想用 GIT 删除整个目录...每次我不断收到相同的错误并且不明白为什么会这样。 我想删除“blue_white”文件夹... ├── css │ ├── design.css │ └──
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
使用 /bin/rm abc.txt 有什么区别以及有时您必须这样做的时候 alias rm然后用 rm abc.txt 执行 最佳答案 /bin/rm将始终引用二进制 rm命令在您的系统上。如果你只
大多数文章,我都读过。他们建议使用 rm(list=ls())但我不知道如果我喜欢使用 rm() 有什么区别 我可以用rm()而不是 rm(list=ls())如果我想清除所有变量? 请给我一些建议。
问题 Bash 中的 rm -d 和 rm -R 命令有什么区别? 我应该使用哪一个? 详情 根据 rm 命令的手册页: rm -d 尝试删除目录以及其他类型的 文件。 rm -R 尝试删除以每个文件
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a software
标题是描述。 我只是想知道 rm -r 和 rm -R 之间有什么区别。 Linux man 描述似乎完全相同(还有一个,--recursive),但很多人使用 -r 和 -R 好像它们不一样。 所以
我使用 rm、Finder 等从 Git 存储库中删除了一堆文件和目录。 我正在寻找一个 Git 命令,它将这些记录到标记为删除的索引中,就好像我对它们调用了 git rm 一样。 我知道 git a
在 SVN 上,直接从文件系统中删除某些内容(而不是使用 svn)会带来很多麻烦。 我在使用 git 时没有发现这是一个问题,但我注意到 git 有它自己的 rm 实现(git rm). rm 和 g
我想备份我的 gitlab 容器。有两种选择: docker exec -ti my.gitlab.container sh -c "/opt/gitlab/bin/gitlab-rake gitla
我正在关注 this Wikipedia example查找和删除文件。 [jalal@galapagos-04] (5)$ touch 'not important_file' [jalal@gal
我有一个 shell 脚本在 cygwin 环境中的 windows 环境中运行。该脚本有一个清除功能,可以根据特定条件删除系统中的特定文件夹。 我准备好要删除的所有文件夹的列表,然后使用以下命令:
当我们使用 docker build 命令构建 docker 镜像时,我们有两个选项 --force-rm=true 和 --rm=true移除中间容器。这两个选项有什么区别,分别在什么场景下使用。
我在删除Docker容器时遇到问题-当我使用前一个命令时,它不起作用(Docker报告了容器ID,但没有删除它)。后者起作用了。据我所知,Docker语法是相同的: C:\Users\user>doc
我尝试计算数据 x 的每列的总和。但我总是遇到这个错误 "Error in colSums(x, na.rm = T) : invalid 'na.rm' argument" 为什么 na.rm 参数
有人知道如何删除 R 中除一个对象之外的所有内容吗?通常,要删除我编码的所有内容: rm(list=ls()) 所以我试过: rm(c(list=ls()-my_object)) 但它没有用。 最佳答
我是一名优秀的程序员,十分优秀!