所以我是一个菜鸟,在工作中遇到了问题。有一个程序在 ie 中输出名称
apple
banana
orange
P1n34ppl3
问题是与该文件(单独的程序)相对应的文件仅在 1.txt 2.txt 等中。有没有一种方法可以迭代给定目录中的文件,仅使用核心实用程序(即 mv、ls、grep、awk、sed)将它们重命名为文本文件中的名称。该系统是一个独立的 RHEL 盒子,有点旧,无法获取补丁或使用新程序连接到存储库。
答案1
假设当前工作目录中非隐藏文件的数量与输出中的行数一样多,your-program
并且所有文件名都不包含换行符,则可以在支持 ksh 样式进程替换的 shell(ksh、zsh、bash)中执行以下操作:
paste -d '\n' <(ls -v) <(your-program) | xargs -rn2 -d '\n' echo mv --
echo
(如果看起来不错,则删除)。
ls
with 按-v
数字排序,因此例如10.txt
位于9.txt
and之间,11.txt
而不是按照正常词汇顺序介于1.txt
and之间。2.txt
paste
压缩ls
和 的行your-program
。
xargs
一次获取两行传递给mv
.
-v
、-r
、-d
是 GNU 扩展,但您的系统应该具有 GNU 实用程序。
如果你有zsh
,你可以用以下方法更可靠地做到这一点:
files=( *(Nn) ) # or *.txt(Nn) or <->.txt(Nn) for number.txt only
lines=( ${(f)"$(your-program)"} )
for old new (${files:^lines}) echo mv -- $old $new