0

我正在尝试将目录名称的一部分保存到变量中,以便可以将其添加到文件名的开头。

这是我到目前为止所拥有的:

var=1
CH=`ls | awk '/[0-9]{2}(?=_.*)/ {if (NR=$var) print $0}'`
echo $CH

文件夹名称看起来像01_Startup. 但回声是空白的。我想不通。有谁知道这是否可以通过 shell 脚本实现?我不太确定 | 的顺序以及如何组合命令。谢谢。

树:

Benu-master
|
|--Chapter_02_Startup
|--|--01_Source_tree
|--|--02_Console
|--|--03_DEBUG

等等。

4

3 回答 3

1

像这样的东西?

for c in Chapter_*; do
    v=${c#Chapter_}
    v=${v%%_*}
    echo chapter $c has number $v   # more chapter-processing code here
done

顺便说一句,避免解析ls输出

于 2013-07-22T05:54:53.060 回答
1

awk不支持PCRE,因此积极的前瞻将不起作用。此外,bash不能awk像那样调用变量。

我从您的要求中看到的可以通过bash内置的字符串替换来满足。

$ var=01_Startup
$ echo "${var%_*}"
01

您可以使用find收集目录列表并使用字符串替换。

find . -type d | while read -r dir; do echo "$dir ---> ${dir%_*}"; done
于 2013-07-22T04:33:53.197 回答
1

用 awk 试试这个 find 命令:

find Chapter* -name "*.iso" -type f | awk -F'/' '{
   split($1, a, "_");
   system("mv " $0 " " $1 "/"  a[2] "_" $2)
}'
于 2013-07-22T06:04:56.093 回答