2017-02-21 123 views
0

我想製作一個腳本,它將查找給定硬盤中的所有文件夾和文件。然後我想將符號鏈接到另一個文件夾。然而,如果文件夾或文件包含空格,ln命令會失敗,有人可以幫助我修改ln -sf $ MOVIE_FILE_LINKS -t $ MOVIES_LIB命令以使文件夾具有空格功能嗎? 感謝Linux bash腳本與空格的符號鏈接

#! /bin/bash 
# Version: 2017.02.21 

SRC="/mnt/hdd_1.5T 
/mnt/hdd_4T" 

MOVIES_TEXT="Movies.*" 
MOVIES_LIB="/mnt/Library.Movies/" 

rm -rf $MOVIES_LIB #need more elegant solution 
mkdir -p $MOVIES_LIB 

clear 

MOVIE_DIRS=$(find $SRC -maxdepth 1 -type d -name "$MOVIES_TEXT") 
MOVIE_DIR_LINKS=$(find $MOVIE_DIRS -maxdepth 1 -type d | sort | awk '$0 !~ last "/" {print last} {last=$0} END {print last}') 
MOVIE_FILE_LINKS=$(find $MOVIE_DIRS -maxdepth 1 -type f -name "*.*") 

echo "$MOVIE_DIR_LINKS" 
#ln -sf $MOVIE_LINKS $MOVIES_LIB; 
echo "$MOVIE_FILE_LINKS" 
#ln -sf $MOVIE_FILE_LINKS -t $MOVIES_LIB; 
+0

使用反斜線空白或把參數轉換爲雙引號。 – arkascha

+0

雙引號不能以這種方式工作:ln -sf「」$ MOVIE_FILE_LINKS「」-t $ MOVIES_LIB; – DaeMonS

+0

'ln -sf「$ MOVIE_FILE_LINKS」-t「$ MOVIES_LIB」'? –

回答

0

你可以嘗試使用find-exec行動:

find $MOVIE_DIRS -maxdepth 1 -type d -exec ln -sf -t $MOVIES_LIB {} + 
find $MOVIE_DIRS -maxdepth 1 -type f -name "*.*" -exec ln -sf -t $MOVIES_LIB {} + 
+0

這個解決方案似乎是完美的 - 只是測試。非常感謝。 – DaeMonS

+0

這裏有一件小事情:鏈接將創建所有子文件夾+不幸的是,主文件夾也將創建爲符號鏈接 - 因此庫文件夾也具有該文件夾以及類型的兩倍。我會嘗試刪除某種方式與腳本...不知道 – DaeMonS

+0

添加'-mindepth 1'爲防止主文件夾在查找結果 – SergA