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的解决方案