我有很多文件,有长文件名,符号,空格等。我想随机盲目重新命名所有的一次,同时给他们从1-9a-Z
随机文件名。我不想操纵每个文件的名称,因为有时会因为符号,空格,长度等原因而抛出错误。盲目重命名文件 - linux
任何类型的帮助都非常感谢。先谢谢你。
我有很多文件,有长文件名,符号,空格等。我想随机盲目重新命名所有的一次,同时给他们从1-9a-Z
随机文件名。我不想操纵每个文件的名称,因为有时会因为符号,空格,长度等原因而抛出错误。盲目重命名文件 - linux
任何类型的帮助都非常感谢。先谢谢你。
您可以使用inodenumber作为文件名。保证在文件系统中是唯一的。
#!/bin/sh
# inodenumber+name
find . -name \*tmp -type f -ls | awk '{print $1," ",$11}' | (
while read i p; do
# UPDATE: extract the basename and suffix
b=`basename $p`
s="${b##*\.}"
echo "b=$b"
echo "s=$s"
# remove the echo after testing ...
echo mv -i $p $i.$s
done
)
#eof
注意:如果文件名中有空格或制表符,这将不起作用。
mv filename tmp/$i
,其中$i
是一个递增编号。mv tmp/* .
。你好,我怎么做$ i作为递增的数字? – thevoipman 2012-07-23 03:03:30
也许一个简单的bash脚本,如奥利建议:
#!/bin/bash
counter=1
for i in *; do
mv "$i" "$counter";
((counter++))
done
HTH
让bash做数学运算:'((counter ++))' – 2012-07-21 16:33:21
但是诀窍就是随机地*做他的问题。当使用建议的awk脚本来构建涉及分类某些文件的作业问题时,我使用了这个建议的awk脚本。重命名必须是随机的,否则你可以从名单列表中的顺序推断出该类。 – 2013-03-06 13:10:11
@peterkarasev:请参阅下面Oli的回答下的OP评论。 _random_这个词可以通过不同的复杂程度采取几种不同的方式。但是,如果您确实想创建一个“随机”字符串,请使用'/ dev/urandom'。可能是这样的:' dev/urandom tr -dc'[0-9A-Za-z]'|头-c 8; echo'。 HTH – Steve 2013-03-06 14:00:26
Oneliner与临时文件名(你自己的改变目录):
for f in *; do mv "$f" `mktemp -p /home/user/temp`; done
+1。你可能想要先生成新的文件名,看看它是否已经存在'while true;做新= $(mktemp); [[-e“$ new”]] ||打破;完成; mv“$ f”“$ new”' – 2012-07-21 16:35:54
您好,我已经尝试过您的建议,它给了我错误: 用法:mktemp [-V] [-dqtu] [-p前缀] [模板] mv:'201207217MsrpnCsa9n6Vht.mp3'后丢失目标文件操作数' 尝试'mv --help'以获取更多信息。 mktemp:无效选项 - - – thevoipman 2012-07-22 06:42:13
好的,我已经将--tmpdir选项更改为-p。立即尝试并给我feedabck。 – igustin 2012-07-22 12:53:03
是的,这终于适用于我,但是,如何通过重命名所有内容并仍然保留文件扩展名来实现此目的? – thevoipman 2012-07-22 12:04:34
'suffix =“$ {p ## * \。}”'可以做到这一点。可能你应该先从p得到基名。 – wildplasser 2012-07-22 13:48:33
@thevoipman - 完全符合“扩展”的标准?如果我有'backupfile.20120720.tar.gz',你是在第一个点还是最后一个点分开的?在所有情况下,“通用”解决方案都不起作用。每个解决方案都是专门构建的。 – ghoti 2012-07-22 22:43:20