我有很多文件,有長文件名,符號,空格等。我想隨機盲目重新命名所有的一次,同時給他們從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