2017-02-21 55 views
0

特定のハードドライブ内のすべてのフォルダとファイルを検索するスクリプトを作成しようとしています。私は別のフォルダへのシンボリックリンクを作成したい。しかし、lnコマンドが失敗した場合、ln -sf $ MOVIE_FILE_LINKS -t $ MOVIES_LIBコマンドを変更してスペースを含むフォルダを作成することができますか?あなたはfind-execアクションを使用しようとすることができ おかげ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 $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

ここに小さなものが1つあります:リンクはすべてのサブフォルダを作成します+残念ながら、メインフォルダもシンボリックリンクとして作成されます - したがって、ライブラリフォルダにはそのようなフォルダも2倍になります。私は何とかスクリプトを使って削除しようとしています...まだ考えていません – DaeMonS

+0

メインフォルダを防ぐために '-mindepth 1'を追加しました。結果は – SergA

関連する問題