awk系统语法抛出错误

时间:2014-10-17 11:18:20

标签: linux awk

我正在尝试将我目录中的所有文件单独移动到新目录phonex,并同时将其重命名为phonex.txt。 例如。

1.txt, 2.txt, jim.txt

成为:

phone1.txt in directory phone1
phone2.txt in directory phone2
phone3.txt in directory phone3.

我是awk的新手,但我已设法创建目录,但我无法正确重命名。 我试过了:

ls|xargs -n1|awk ' {i++;system("mkdir phone"i);system("mv "$0" phone”i ”.txt -t phone"i)}'

有很多错误:

mv: cannot stat `phone”i': No such file or directory

ls|xargs -n1|awk ' {i++;system("mkdir phone"i);system("mv "$0" phone”i ”/phone"i”.txt”)}'

错误:

awk: 1: unexpected character 0xe2

xargs:/ bin / echo:由信号13终止 任何人都可以帮我完成它吗? TIA!

2 个答案:

答案 0 :(得分:3)

在此方案中完全没有将ls导入xargsawk。您尝试做的事情可以使用一个简单的循环来完成:

for f in *.txt; do
    i=$((i+1))
    dir="phone$i"
    mkdir "$dir" && mv "$f" "$dir/$dir.txt"
done

根据你的shell,$i的增量可以用不同的方式完成(比如bash中的((++i))),但这种方式符合POSIX标准,所以应该适用于任何现代shell。

顺便说一下,原始错误的原因是你使用的是引号,它们不被shell理解。您应始终只在shell中使用单个'和双"

答案 1 :(得分:1)

如果你希望它增加数字。
其他汤姆Fenech的方式是要走的路!

for i in *.txt;do d=phone$((++X));mkdir "$d"; mv "$i" "$d/$d.txt";done

此外,您可能需要在执行此操作之前将x设置为零x=0,以防它已被设置为其他内容