一个bash脚本,用于在linux中取消对子目录中的所有文件的请求

一个bash脚本,用于在linux中取消对子目录中的所有文件的请求,linux,bash,ubuntu,unrar,Linux,Bash,Ubuntu,Unrar,我在Ubuntu服务器18.04上 我的主要目标是从父目录运行一个脚本,该脚本将取消父目录所有子目录中的所有文件的排序。 我还安装了apt install unrr,它位于“/usr/bin/unrr”。 这就是我到目前为止所想到的。但它似乎不起作用: for dir in 'pwd/*/' do dir=${dir%*/} cd dir for file in dir/*/ do "/usr/bin/unrar" x dir/*.r* dir/

我在Ubuntu服务器18.04上

我的主要目标是从父目录运行一个脚本,该脚本将取消父目录所有子目录中的所有文件的排序。 我还安装了apt install unrr,它位于“/usr/bin/unrr”。 这就是我到目前为止所想到的。但它似乎不起作用:

for dir in 'pwd/*/'
do
  dir=${dir%*/} 
  cd dir
    for file in dir/*/
  do
    "/usr/bin/unrar" x dir/*.r* dir/
done

我发现了一个使用7zip的Windows工作脚本,这里是一个开始的示例;根据需要调整模式和回显语句:

#!/bin/bash

pattern='*/*.rar'
archives=($pattern)

if [[ "${archives[@]}" == "$pattern" ]]; then
    echo NONE 1>&2
    exit
fi

for rpath in "${archives[@]}"; do
    dir=${rpath%/*}
    rar=${rpath##*/}
    pushd "$dir" > /dev/null
    echo -e "\ndir: $dir"
    echo unrar args "$rar"
    popd > /dev/null
done

这是一个开始的例子;根据需要调整模式和回显语句:

#!/bin/bash

pattern='*/*.rar'
archives=($pattern)

if [[ "${archives[@]}" == "$pattern" ]]; then
    echo NONE 1>&2
    exit
fi

for rpath in "${archives[@]}"; do
    dir=${rpath%/*}
    rar=${rpath##*/}
    pushd "$dir" > /dev/null
    echo -e "\ndir: $dir"
    echo unrar args "$rar"
    popd > /dev/null
done

如果您只想取消对找到它的目录中的每个rar文件的排序,
find
可以直接执行此操作。这需要一些时间来适应,但它很值得学习

find-名称'*.rar'-execdir unar{}\;

简单地说,
-execdir
说运行到
\
{}
占位符将替换为文件名。

如果您只想取消对找到它的目录中的每个rar文件的排序,
find
可以直接执行此操作。这需要一些时间来适应,但它很值得学习

find-名称'*.rar'-execdir unar{}\;

简单地说,
-execdir
说运行到
\
{}
占位符将替换为文件名。

直接的问题是单引号阻止通配符匹配任何文件。如果
pwd
不是我们要遍历的唯一目录的字面名称,您可能应该简单地将其替换为
(不必要地调用
pwd
命令的正确方法是
“$(pwd)”
),如果要使用变量
dir
而不是尝试访问名为
dir
的目录,则其语法为
“$dir”
。(在语法上不需要引号,但在处理对未知文件名的引用时,引号始终是一个好主意;当然,
/usr/bin/unrr
是对文件的字面引用,在文件名中没有类似于
*
的有趣惊喜,因此引号是多余的,也有点奇怪。另请参阅)直接的问题是单引号阻止通配符匹配任何文件。如果
pwd
不是我们要遍历的唯一目录的字面名称,您可能应该简单地将其替换为
(不必要地调用
pwd
命令的正确方法是
“$(pwd)”
),如果要使用变量
dir
而不是尝试访问名为
dir
的目录,则其语法为
“$dir”
。(在语法上不需要引号,但在处理对未知文件名的引用时,引号始终是一个好主意;当然,
/usr/bin/unrr
是对文件的字面引用,在文件名中没有类似于
*
的有趣惊喜,因此引号是多余的,也有点奇怪。另请参阅)将模式放入一个变量中,然后立即使用它填充一个数组似乎是一种浪费键入和少量内存的奇怪方式。var模式的存在是为了易于使用,并且有多种用途,第4行和第6行。将模式放入一个变量中,然后立即使用它填充一个数组似乎是一种浪费键入和少量内存的奇怪方式。var模式的出现是为了便于使用,并且有多种用途,第4行和第6行。