Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux ./mv.sh:line 4:cd:1.4-1.5.csh:不是目录_Linux_Bash - Fatal编程技术网

Linux ./mv.sh:line 4:cd:1.4-1.5.csh:不是目录

Linux ./mv.sh:line 4:cd:1.4-1.5.csh:不是目录,linux,bash,Linux,Bash,我想将file1移动到当前目录的许多子目录中的directory1。file1和directory1都位于每个子目录中。我在当前目录中编写了以下脚本,但它报告“/mv.sh:line 4:cd:directory1:没有这样的文件或目录”。实际上,directory1位于每个子目录中 1 #!/bin/bash 2 3 for i in *; do 4 builtin cd $i 5 mv file1 directory1 6 builtin cd .. 7 done 错误

我想将file1移动到当前目录的许多子目录中的directory1。file1和directory1都位于每个子目录中。我在当前目录中编写了以下脚本,但它报告“/mv.sh:line 4:cd:directory1:没有这样的文件或目录”。实际上,directory1位于每个子目录中

1 #!/bin/bash
2
3 for i in *; do
4    builtin cd $i
5    mv file1 directory1
6    builtin cd ..
7 done
错误


我想第6行中的
cd..
会将您带到另一个目录。您可以通过在第6行和第7行之间插入
内置pwd
来检查这一点。这将显示您在
cd..
之后实际所在的目录

  • 也许其中一个目录实际上是指向另一个目录的链接?这可能是降落在你意想不到的地方的原因
  • 如果
    cd$i
    失败,您也可能会进入错误的目录,如果$i不是目录或您没有权限浏览它,则可能会发生这种情况

我想第6行中的
cd..
会将您带到另一个目录。您可以通过在第6行和第7行之间插入
内置pwd
来检查这一点。这将显示您在
cd..
之后实际所在的目录

  • 也许其中一个目录实际上是指向另一个目录的链接?这可能是降落在你意想不到的地方的原因
  • 如果
    cd$i
    失败,您也可能会进入错误的目录,如果$i不是目录或您没有权限浏览它,则可能会发生这种情况

是否有可能
目录1
是一个悬垂的符号链接?例如:

mkdir foo
ln -s foo foolink
mv foo bar # foolink still points to foo but foo is gone!
cd foolink
# bash: cd: foolink: No such file or directory
而且,代替

cd dir
mv foo subdir
cd ..
我建议使用更简洁、更重要、更安全的版本:

mv dir/foo dir/subdir/
为什么这样更安全?假设
dir
不存在:

cd dir        # Fails
mv foo subdir # Oops! Now we're trying to move a file from the current directory
cd ..         # Even bigger oops! Now we're even higher in the directory tree,
              #   and on the next iteration will be moving files around that we
              #   shouldn't be
(在这种特殊情况下,您也可以通过使用
set-o errexit
来避免此问题,但在我看来,脚本中的
cd..
通常是危险的。)


此外,正如Ansgar Wiechers所说,你应该使用
find
,而不是自己尝试爬树。

有没有可能
directory1
是一个悬空的符号链接?例如:

mkdir foo
ln -s foo foolink
mv foo bar # foolink still points to foo but foo is gone!
cd foolink
# bash: cd: foolink: No such file or directory
而且,代替

cd dir
mv foo subdir
cd ..
我建议使用更简洁、更重要、更安全的版本:

mv dir/foo dir/subdir/
为什么这样更安全?假设
dir
不存在:

cd dir        # Fails
mv foo subdir # Oops! Now we're trying to move a file from the current directory
cd ..         # Even bigger oops! Now we're even higher in the directory tree,
              #   and on the next iteration will be moving files around that we
              #   shouldn't be
(在这种特殊情况下,您也可以通过使用
set-o errexit
来避免此问题,但在我看来,脚本中的
cd..
通常是危险的。)


此外,正如Ansgar Wiechers所说,您应该使用
find
而不是自己尝试爬树。

我会使用
find
而不是尝试爬树目录树:

find . -type f -name "file1" -execdir mv {} directory1/ \;

这假设每个包含文件
file1
的目录都有一个子目录
directory1
我将使用
find
而不是尝试爬网目录树:

find . -type f -name "file1" -execdir mv {} directory1/ \;

这假设每个包含文件
file1
的目录都有一个子目录
directory1

您确定所有子目录中都有
directory1
file1
吗?我100%确定。我明白了!!!这些子目录之间有一个文件(不是目录)。我只是删除了那个文件,然后那个mv.sh脚本就可以工作了!!!这是否意味着这些目录之间不应该有文件?如果这些子目录之间有文件。cd…会把我拖到更高的目录。谢谢,伙计们!!你确定所有子目录中都有
directory1
file1
吗?我百分之百肯定。我明白了!!!这些子目录之间有一个文件(不是目录)。我只是删除了那个文件,然后那个mv.sh脚本就可以工作了!!!这是否意味着这些目录之间不应该有文件?如果这些子目录之间有文件。cd…会把我拖到更高的目录。谢谢,伙计们!!这些子目录之间有一个文件(不是目录)。我只是删除了那个文件,然后那个mv.sh脚本就可以工作了!!!如果这些子目录之间存在文件。cd…会把我拖到更高的目录。谢谢,伙计们!!光盘危险。这些子目录之间存在文件(而不是目录)。我只是删除了那个文件,然后那个mv.sh脚本就可以工作了!!!如果这些子目录之间存在文件。cd…会把我拖到更高的目录。谢谢,伙计们!!光盘这是危险的。