使用前缀加字母更新单个目录中的文件名

使用前缀加字母更新单个目录中的文件名

我发现了许多方法可以在 Linux 上的文件夹中的文件上添加简单的前缀,例如

for FILENAME in *; do mv $FILENAME REF_$FILENAME; done 

https://stackoverflow.com/questions/4787413/rename-files-and-directories-add-prefix

我想这样做,但每个文件的 REF 更改为 REFa、REFb、REFc……这将在单个目录上手动运行,因为每个文件的 REF 都不同。

提前致谢,因为获胜者实际上将为我节省数小时的手动数据输入时间;-)

答案1

快速而粗略的答案如下:

array=(`echo {a..z}{a..z}{a..z}`);i=0; for FILENAME in *; do  mv $FILENAME REF${array[i]}_$FILENAME; i=$(($i+1)); done

但我更喜欢将其作为脚本来执行,然后运行它 - 它更容易维护和描述

array=(`echo {a..z}{a..z}{a..z}`)
i=0 
for FILENAME in *
do 
    mv $FILENAME REF${array[i]}_$FILENAME 
    i=$(($i+1)) 
done

第一行加载 3 位数字字母序列,从 aaa 开始,一直到 zzz。您可以通过增加或减少 {a..z} 的数量来减小或增加此数组的大小 - 并且您可以将其替换为大写字母或其他一些简单序列。

i 是一个计数器,我们将其递增,以便我们可以为每个 REF 值获得一个唯一的序列。

我注意到我不喜欢“FILENAME in *”这段代码,因为它不能很好地与子目录配合使用。我倾向于用以下代码替换该行:

for FILENAME in `find . -type f`

处理文件(包括子目录)或

for FILENAME in `find . -maxdepth 1 -type f`

仅适用于当前目录中的文件(即不递归,并忽略目录)

答案2

您可以针对此特定问题构建一个命令,我相信其他答案也会这样做。我的答案是更一般,也许它会适合你。

vidir(最有可能来自moreutils包)允许您在文本编辑器中编辑文件名。要选择编辑器,请设置EDITOR变量。

这样,您就可以使用 的许多功能viemacs或您使用的任何编辑器。阅读man vidir以了解如何使其与子目录一起工作(如果需要)。

这是它在编辑器中显示的示例:

1   ./AdbeRdr9.5.5-1_i486linux_enu.bin
2   ./AdobeAIRInstaller.bin
3   ./Dir1
4   ./Dir10
5   ./Dir2
6   ./bashfile.sh

数字标识了此特定实例中的文件vidir,它们后面跟着制表符。除非您知道自己在做什么,否则不能触碰这些数字和标签。当您保存文件并退出编辑器时,文件名的更改将被应用。

如果你担心文件名中含有制表符或换行符,这会破坏某些东西,那么请保持冷静。据我所知,vidir一开始就会拒绝使用它。

现在是最好的部分。编辑器也可以在控制台之外工作,因此可以:

  1. 调用EDITOR=kate vidir,这将运行kate编辑器。
  2. 将所有文本复制并粘贴到 LibreOffice Calc;您将得到两列。
  3. 使用 Calc 提供的工具处理名称以获得两列输出:数字和新的名字。
  4. 将这两列复制回去kate并替换旧文本。
  5. 保存文本文件(不要更改其名称)。
  6. 退出编辑器。

这非常强大。删除行并保存文本文件将删除文件。交换数字将使文件交换名称(如果您使用子目录,则甚至交换路径)。能力越大,责任越大。您可能应该首先试验一下可用文件和目录。

相关内容