Text-Processing

將目前目錄中的所有文件重命名為文本文件中列出的名稱

  • January 14, 2022

原標題為:Injecting vidir with vim like sequence of commands

我一直在嘗試使用 vidir 重命名多個文件,這些文件被某人意外重命名。問題是 vidir 不使用它有時隨機選擇的文件的排序順序。我的文件被搞砸了,我必須使用 ls -rt 重命名它們

問題: 文件全部隨機重命名。但是我有一個文本文件,其中包含 ls -rt 順序中的所有文件的名稱。想要使用該文本文件讀取名稱並使用ls -rt順序重命名文件夾中的文件

ls -rt輸出

cbb308e52a3345e4ff436b2f
a4b8e2aacae0a3304b3c28b8
43ca3253da336012788d3279~
ada694316cc605c7ffb790d1
3b6cc01ff2aaa5b1709918ef
7057cbda90a7adf303a56bb4~
7c0dd50bc52bb444000cc175

Txt_with_Names_In_Order

e0e87002d27674ddafdb5f7077887da6-1.ps
c7685093e84da8074859efc5783687b6-2.ps
062936279f54f4f5a541b5bee4daf5d4-3.ps
6f91bb10840a4a5a5331c832e5c2beb1-4.ps
9a8c5e9ae8b633a2a588518d2b9ab656-5.ps
bcb77709b10eafbd2fc88ce8db41ed3f-6.ps
e65c35be3c8b0aa051fb33ed2ce43ff7-7.ps

解決方案:

現在,它可以通過循環來完成,但是編寫長循環命令是不可行的,當vidir很快就派上用場時。

我的 vim 命令序列包括

^[ggVGg^A some regex
ls -rt | vidir -

以上作品但它需要互動式工作。

想注入像這樣的序列

ls -rt | vidir - << EOF
commands
EOF

或者

vim file << EOF sequence EOF ------> it works
command | vim - << EOF sequence of vim commands to edit input ELF ----> Want a workaround for this

但是輸入似乎是相互矛盾的。

如果可以解決方法,任何人都可以提供幫助。

$$ Not want to use expect $$ 任何人都可以幫助: 如何在 vim ex 模式下直接從命令行使用 ^[ggVgg^A。?

我正在嘗試將某些命令的輸出通過管道傳輸到vim,並註入vim命令序列以非互動方式對該管道輸入進行操作

您要求找到基於vim或是vidir典型的XY 問題的解決方案。

據我了解您的問題,真正的要求是將目前目錄中的現有文件重命名為按ls -rt順序排列的文本文件中的名稱。

以下解決方案bash假定目前和保存的文件名都不包含空格、換行符或其他有問題的字元,並且文本文件每行包含一個文件名。

readarray -t new < /path/to/filenames.txt ; \
i=0 ; \
ls -rt1 | while read -r old
do
   echo mv "$old" "${new[$i]}"
   ((i++))
done

上面的腳本只會顯示將要執行的命令。如果輸出符合您的要求,請刪除echo之前mv的內容並再次執行腳本以實際重命名文件。

引用自:https://unix.stackexchange.com/questions/686221