需要使用 core utils 使用文本文件中的名称批量重命名文件

需要使用 core utils 使用文本文件中的名称批量重命名文件

所以我是一个菜鸟,在工作中遇到了问题。有一个程序在 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(如果看起来不错,则删除)。

lswith 按-v数字排序,因此例如10.txt位于9.txtand之间,11.txt而不是按照正常词汇顺序介于1.txtand之间。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

相关内容