我正在尝试将我目录中的所有文件单独移动到新目录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!
答案 0 :(得分:3)
在此方案中完全没有将ls
导入xargs
到awk
。您尝试做的事情可以使用一个简单的循环来完成:
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
,以防它已被设置为其他内容