Bash Can';不能移动可执行文件
我正在编写这个脚本,但是选项Bash Can';不能移动可执行文件,bash,Bash,我正在编写这个脚本,但是选项-x不起作用,它应该只移动可执行文件 这是我收到的错误: $ sh wizlast.sh u555 -x mv: target ‘./u555/ud’ is not a directory 它以正确的文件(ud)为目标,但不移动它。我尝试了不同类型的组合 #!/bin/bash dir=$1 if [ $# -lt 1 ] ; then echo "ERROR: no argument" exit 1 # pas 0 else c
-x
不起作用,它应该只移动可执行文件
这是我收到的错误:
$ sh wizlast.sh u555 -x
mv: target ‘./u555/ud’ is not a directory
它以正确的文件(ud)为目标,但不移动它。我尝试了不同类型的组合
#!/bin/bash
dir=$1
if [ $# -lt 1 ] ; then
echo "ERROR: no argument"
exit 1 # pas 0
else
case $2 in
-d)
mv $dir/* /tmp/*
echo 'moving with -d'
;;
-x)
find -executable -type f | xargs mv -t "$dir"/* /tmp
echo 'moving executables'
;;
*)
mv $dir/* /tmp/
echo 'no flag passed so moving all'
echo "mv $dir/* /tmp/"
;;
esac
fi
不要在
mv
命令的目标部分使用通配符,因此
mv $dir/* /tmp/*
做
不要在
mv
命令的目标部分使用通配符,因此
mv $dir/* /tmp/*
做
不要在
mv
命令的目标部分使用通配符,因此
mv $dir/* /tmp/*
做
不要在
mv
命令的目标部分使用通配符,因此
mv $dir/* /tmp/*
做
man mv
显示:
-t, --target-directory=DIRECTORY
您不能将
$dir/*
用作目标目录,因为shell会将其展开,并将列表中的第一个文件视为目标文件(因此出现错误)。man mv
显示:
-t, --target-directory=DIRECTORY
您不能将
$dir/*
用作目标目录,因为shell会将其展开,并将列表中的第一个文件视为目标文件(因此出现错误)。man mv
显示:
-t, --target-directory=DIRECTORY
您不能将
$dir/*
用作目标目录,因为shell会将其展开,并将列表中的第一个文件视为目标文件(因此出现错误)。man mv
显示:
-t, --target-directory=DIRECTORY
您不能将$dir/*
用作目标目录,因为shell会将其展开并将列表中的第一个文件视为目标(因此会出现错误)。使用此格式
例如,将文件移动到$dir
find -executable -type f | xargs -I{} mv {} "$dir"/
I{}
告诉xargs用管道中的字符串替换和出现{}
,因此在mv
之后,每个字符串都被替换在目录“$dir”/
之前,命令工作正常
您无法工作的原因是查找中的字符串是最后读取的,因此被视为要移动到的目录。使用此格式
例如,将文件移动到$dir
find -executable -type f | xargs -I{} mv {} "$dir"/
I{}
告诉xargs用管道中的字符串替换和出现{}
,因此在mv
之后,每个字符串都被替换在目录“$dir”/
之前,命令工作正常
您无法工作的原因是查找中的字符串是最后读取的,因此被视为要移动到的目录。使用此格式
例如,将文件移动到$dir
find -executable -type f | xargs -I{} mv {} "$dir"/
I{}
告诉xargs用管道中的字符串替换和出现{}
,因此在mv
之后,每个字符串都被替换在目录“$dir”/
之前,命令工作正常
您无法工作的原因是查找中的字符串是最后读取的,因此被视为要移动到的目录。使用此格式
例如,将文件移动到$dir
find -executable -type f | xargs -I{} mv {} "$dir"/
I{}
告诉xargs用管道中的字符串替换和出现{}
,因此在mv
之后,每个字符串都被替换在目录“$dir”/
之前,命令工作正常
您无法工作的原因是查找中的字符串是最后读取的,因此被视为要移动到的目录。在使用
Bash
时,您应该利用它的工具和语法改进
循环和全球化的解决方案
因此,您可以使用和来测试当前文件是否可执行,而不是使用find
:
“$dir”/*中f的;做
如果[-x$f]];然后
mv“$f”/tmp
fi
完成
它使用[…]
中的条件表达式-x
:
-x文件
如果文件存在且可执行,则为True
作为一个班轮
您可以像这样重写它:“$dir”/*中的f的;执行[-x$f]]和&mv“$f”/tmp;完成
深度搜索(d>1)
当前循环仅限于“$dir/”中直接存在的内容,如果您想深入探索“$dir//*”,则需要:
循环中的glob以使用它:“$dir”/**
shopt-s globstar#启用/设置
对于“$dir”/**/*中的f;执行[-x$f]]和&mv“$f”/tmp;完成
shopt-u globstar#禁用/取消设置
算术伦理语境
Bash有语法糖,可以替换:
if[$#-lt 1];然后…菲
与
if($#<1));然后…菲
有关算术表达式的更多信息,请阅读以下文章:
1.
2. . 当您使用
Bash
时,您应该利用它的工具和语法改进
循环和全球化的解决方案
因此,您可以使用和来测试当前文件是否可执行,而不是使用find
:
“$dir”/*中f的;做
如果[-x$f]];然后
mv“$f”/tmp
fi
完成
它使用[…]
中的条件表达式-x
:
-x文件
如果文件存在且可执行,则为True
作为一个班轮
您可以像这样重写它:“$dir”/*中的f的;执行[-x$f]]和&mv“$f”/tmp;完成
深度搜索(d>1)
当前循环仅限于“$dir/”中直接存在的内容,如果您想深入探索“$dir//*”,则需要:
循环中的glob以使用它:“$dir”/**
shopt-s globstar#启用/设置
对于“$dir”/**/*中的f;执行[-x$f]]和&mv“$f”/tmp;完成
shopt-u globstar#禁用/取消设置
算术伦理语境
Bash有语法糖,可以替换:
if[$#-lt 1];然后…菲
与
if($#<1));然后…菲
有关算术表达式的更多信息,请阅读以下文章:
1.
2. . 当您使用
Bash
时,您应该利用它的工具和语法改进
循环和glo的解决方案