2017-02-21 5 views
0

Я пытаюсь создать скрипт, который найдет все папки и файлы на данном жестком диске. то я хочу сделать символические ссылки в другую папку. Однако команда ln не работает, если папка или файл содержит пробел, может ли кто-нибудь помочь мне изменить команду ln -sf $ MOVIE_FILE_LINKS -t $ MOVIES_LIB, чтобы сделать папки с пробелами? БлагодаряLinux bash script symlink с пробелами

#! /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

Вы можете попробовать использовать -exec действие find «s:

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

Смежные вопросы