Text-Processing
將目前目錄中的所有文件重命名為文本文件中列出的名稱
原標題為: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
的內容並再次執行腳本以實際重命名文件。