Car*_*ata 38 command-line scripts
我有一个紧急情况,Linux 和 Bash 初学者在这里尝试编写脚本来重命名一些文件时搞砸了。循环不小心走上了路径(在桌面的文件夹中运行脚本)并重命名/bin为/D_bin(D_是我添加的前缀)所以现在系统无法使用/bin内容,所以不bash,不mv重命名,不sudo......文件in/D_bin没问题,没有重命名,可以复制粘贴它们,但不能在/bin没有 bash 的情况下再次创建文件夹。系统看起来很稳定,但很少有东西可以工作并且无法访问桌面中的文件。
其他的/like文件夹/lib /sbin /etc好像也没问题,图形桌面还在。我害怕重启,因为我不知道它是否能够启动。
root 中是否有 shell 或重命名/D_bin回的方法/bin?需要帮助,非常重要的工作受到影响
我的自杀脚本 :$ :
#!/bin/bash
files=~/Desktop/folder_1/*
for j in $files
do
cd $j
for i in 10n* #file names starting by 10n
do
find * -maxdepth 0 ! -path . -exec mv {} D_{} \;
done
cd ..
done
Run Code Online (Sandbox Code Playgroud)
:( 谢谢!!!!
Rav*_*ina 88
有多种方法可以解决此问题。
如果您有权访问 shell(任何打开的终端),请运行:
sudo /D_bin/mv -T /D_bin /bin
Run Code Online (Sandbox Code Playgroud)
sudo是在/usr/bin所以没有必要用绝对路径运行它。
您可以做的另一件事是,将 加入/D_bin到您的PATH环境变量中,如下所示:
export PATH=$PATH:/D_bin
Run Code Online (Sandbox Code Playgroud)
如果您无权访问任何 shell:
在以 linux 开头的行的末尾,添加:
init=/D_bin/bash
Run Code Online (Sandbox Code Playgroud)按CTRL+x
现在您将被放入 bash shell,您应该将文件系统重新挂载为可读写。
/D_bin/mount -o remount,rw /
Run Code Online (Sandbox Code Playgroud)
并将 D_bin 目录移动到 bin:
/D_bin/mv -T /D_bin /bin
Run Code Online (Sandbox Code Playgroud)
然后重启系统。
它应该可以工作,但如果没有任何效果,您仍然可以使用实时 ubuntu 磁盘/USB 引导系统并解决问题。
如果您没有打开正在运行的终端,要解决这个问题,我会首先尝试找到一个“shell 替代品”,您可以使用它来代替 bash。Python 在 中/usr/bin,所以它应该仍然有效。
Python 2.7.6 (default, Oct 26 2016, 20:30:19)
[GCC 4.8.4] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import subprocess
>>> subprocess.call(["sudo", "/D_bin/mv", "-T", "/D_bin", "/bin"])
Run Code Online (Sandbox Code Playgroud)
如果这不起作用,我将直接从 Live CD/USB 启动,然后从已知正常的运行环境中修复所有内容。
作为一般建议,我会在评论中第二个 Jonathan Leffler:永远不要cd ..在脚本中使用,它很容易导致此类问题。最好只 cd 进入subshell 中的$j目录,这样您就不必担心返回。
#!/bin/bash
files=~/Desktop/folder_1/*
for j in $files
do
(
cd "$j"
for i in 10n* #file names starting by 10n
do
find * -maxdepth 0 ! -path . -exec mv {} D_{} \;
done
)
done
Run Code Online (Sandbox Code Playgroud)
另外,当然,除非绝对必要,否则不要以 root 身份运行东西。
| 归档时间: |
|
| 查看次数: |
7780 次 |
| 最近记录: |