我发现了许多方法可以在 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
变量。
这样,您就可以使用 的许多功能vi
,emacs
或您使用的任何编辑器。阅读man vidir
以了解如何使其与子目录一起工作(如果需要)。
这是它在编辑器中显示的示例:
1 ./AdbeRdr9.5.5-1_i486linux_enu.bin
2 ./AdobeAIRInstaller.bin
3 ./Dir1
4 ./Dir10
5 ./Dir2
6 ./bashfile.sh
数字标识了此特定实例中的文件vidir
,它们后面跟着制表符。除非您知道自己在做什么,否则不能触碰这些数字和标签。当您保存文件并退出编辑器时,文件名的更改将被应用。
如果你担心文件名中含有制表符或换行符,这会破坏某些东西,那么请保持冷静。据我所知,vidir
一开始就会拒绝使用它。
现在是最好的部分。编辑器也可以在控制台之外工作,因此可以:
- 调用
EDITOR=kate vidir
,这将运行kate
编辑器。 - 将所有文本复制并粘贴到 LibreOffice Calc;您将得到两列。
- 使用 Calc 提供的工具处理名称以获得两列输出:数字和新的名字。
- 将这两列复制回去
kate
并替换旧文本。 - 保存文本文件(不要更改其名称)。
- 退出编辑器。
这非常强大。删除行并保存文本文件将删除文件。交换数字将使文件交换名称(如果您使用子目录,则甚至交换路径)。能力越大,责任越大。您可能应该首先试验一下可用文件和目录。