關於unix,我已經將文件重命名爲原始名稱,後面跟着_inode編號(即文件狗將被重命名爲dog_inodeno)。我現在試圖刪除inode不,所以我可以在其他地方搜索原始文件名。有誰知道我可以做到這一點,並編碼neccesary。搜索部分文件名(UNIX)
感謝
關於unix,我已經將文件重命名爲原始名稱,後面跟着_inode編號(即文件狗將被重命名爲dog_inodeno)。我現在試圖刪除inode不,所以我可以在其他地方搜索原始文件名。有誰知道我可以做到這一點,並編碼neccesary。搜索部分文件名(UNIX)
感謝
這應該做的工作:
find . -type f -name "*_[0-9]*" -exec \
sh -c 'for i do
b=$(basename "$i")
r=$(basename "$i" "_$(ls -i "$i"|awk "{print \$1}")")
if [ "$b" != "$r" ]; then
echo mv "$i" "$(dirname $i)/$r"
fi
done' sh {} +
通過mv
的腳本實際重命名文件替換echo mv
。
基本上我的所有文件名都是格式化的filename_inodeno,我想創建一個腳本來切割包含_和後面的所有內容。 – user2842995
這正是我所建議的腳本所做的,不是嗎? – jlliagre
這裏的解決方案只會在文件的inode號是所提到的格式的文件名的一部分時纔會重命名文件,這正是OP想要的。
解決方案在我的最終成功測試。
find ./ -name "*_[0-9][0-9][0-9][0-9][0-9][0-9]" -exec sh 'rename-files.sh' {} \;
存儲以下腳本以使find命令成功。
#Script Name: rename-files.sh
#!/bin/bash
#Store the result of find
find_result=$1
#Get the existing file name
fname_alone=`expr ${find_result} : '.*/\(.*\)' '|' ${find_result}`
fname_with_relative_path=`expr ${find_result} : '.\(.*\)' '|' ${find_result}`
fname_with_full_path=`echo "$(pwd)${fname_with_relative_path}"`
#Get the inode number of file name
file_inode_no=`find ./ -name ${fname_alone} -printf '%i'`
#Read the end of name
end_of_name=`echo $fname_alone | awk -F "_" '{print $NF}' `
#Check if end of name contains its file's inode number
if [ $end_of_name -eq $file_inode_no ]
then
#Remove the inode number at the end of file name
new_name=`expr $find_result : '.\(.*\)_.*' '|' $find_result`
#Append the path of the file
renamed_to=`echo "$(pwd)${new_name}"`
#Rename your dog_inodeno to dog
mv $fname_with_full_path $renamed_to
fi
希望這會有所幫助。
我想象重命名文件的腳本可以稍微修改以重新命名它們。沒有? – devnull