[英]Create symbolic links transforming file names - Bash Script
我有一個 bash 腳本,它將循環遍歷一個獲取每個文件名的目錄。 我想做的是為這些文件創建一些符號鏈接。 除了我想更改鏈接名稱。
示例 1:
文件名: testFile.so.3.4.5
ln -s testFile.so.3.4.5 testFile.so.3
ln -s testFile.so.3 testFile.so
示例 2:
文件名: testLink.so.4.4
ln -s testLink.so.4.4 testLink.so.4
ln -s testLink.so.4 testLink.so
所以我需要轉換文件名兩次。 第一次刪除除*.so
之后的第一個數字之外的所有內容。 第二次刪除*.so
之后的所有內容。
這是我到目前為止。 我知道這並不多:
#! /bin/bash
# clear any info on screen
clear
# greeting
echo "Starting the script!"
# loop through all files in the directory
for f in *
do
echo "Processing: $f"
done
我對 bash 和文件名轉換有點陌生,因此將不勝感激任何幫助或指導。
或更一般地說:
files='libfoo.so.1.2.3.4.5 libbar.so libqux.so.1'
for f in $files; do
while test ${f##*.} != so; do
link=${f%.*}
ln -s $f $link
f=$link
done
done
這將創建libfoo.so.1.2.3.4 -> libfoo.so.1.2.3.4.5
, libfoo.so.1.2.3 -> libfoo.so.1.2.3.4
, libfoo.so.1.2 -> libfoo.so.1.2.3
、 libfoo.so.1 -> libfoo.so.1.2
、 libfoo.so -> libfoo.so.1
和libqux.so -> libqux.so.1
; libbar.so 將被忽略。
更一般地,僅使用參數擴展:
for f in *.so.*.*
do
if [ -e "$f" ]; then
base=${f%".${f#*.so.*.*}"}
ln -s "$f" "$base"
ln -s "$base" "${base%.*}"
fi
done
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.