簡體   English   中英

如何創建目錄列表的符號鏈接?

[英]How do I make a symbolic link to list of directories?

我必須移動$HOME/.directories因為我的分區錯誤。

我移動到另一個具有更多可用空間的分區。 但我想做一個象征性的聯系,但我不能。 因為當我嘗試類似的東西:

for file in `ls -la | awk '{print$09}'`; do sudo ln -sf "$PWD/$file" /home/inukaze/$file; done

usage: sudo [-D level] -h | -K | -k | -V
usage: sudo -v [-AknS] [-D level] [-g groupname|#gid] [-p prompt] [-u user name|#uid]
usage: sudo -l[l] [-AknS] [-D level] [-g groupname|#gid] [-p prompt] [-U user name] [-u user name|#uid] [-g groupname|#gid] [command]
usage: sudo [-AbEHknPS] [-C fd] [-D level] [-g groupname|#gid] [-p prompt] [-u user name|#uid] [-g groupname|#gid] [VAR=value] [-i|-s]
            [<command>]
usage: sudo -e [-AknS] [-C fd] [-D level] [-g groupname|#gid] [-p prompt] [-u user name|#uid] file ...

我需要完整的路徑來正確讀取符號鏈接。 而我這不起作用。 如何創建文件夾列表以“點”( . )開頭,並在我的主目錄中創建符號鏈接?

我嘗試過的Okey朋友:

1:

for file in `ls -la "$PWD" | awk '{print$09}' | grep "^\."` ; do `sudo ln -sf $("$PWD/$file") $"("/home/inukaze/$file")"` ; done

2:

MYDIR="/media/Compartido/.linux/Home/Inukaze"
DIRS=`ls -la "$MYDIR" | egrep '^d' | awk '{print $9}'`
for DIR in $DIRS ; do sudo ln -sf "$PWD/$DIRS" "/home/inukaze/$DIRS" ; done

3:

find . -type d -maxdepth 1 |while read DIRNAME; do sudo ln -s "${DIRNAME}" /home/inukaze/"${DIRNAME}"; done

但是使用三種方法,我得到了相同的結果,很多不好的符號鏈接,只有6種是正確的。 我不明白為什么。

有些事情是錯的,我開始認為是在

“sudo ln -s $ Varible”$ Destiny; 完成”

好 。 另一個想法???

shopt -s dotglob
cp -s * ~inukaze

嗯。 不是100%清楚你要實現的目標或者它無法正常工作,但我寫了這個嘗試根據你的示例代碼進行調試。 注意我現在使用echo而不是ln -s ,以及將file更改為大寫FILE並用括號括起來以及雙引號:

for FILE in `ls -la | awk '{print$09}'`;
do
  echo "${PWD}/${FILE}" /home/inukaze/"${FILE}"
done

在我的本地系統 - Mac OS X 10.9上 - 它輸出:

/Users/jake/.bash_history /home/inukaze/.bash_history
/Users/jake/.bashrc /home/inukaze/.bashrc
/Users/jake/.cache /home/inukaze/.cache
/Users/jake/.gitk /home/inukaze/.gitk
/Users/jake/.htoprc /home/inukaze/.htoprc
/Users/jake/.mysql_history /home/inukaze/.mysql_history
etc…

所以不清楚你的腳本是如何工作的? 你只想要目錄嗎? 還是文件?

編輯:原始海報只尋找符號鏈接目錄。 所以嘗試使用find代替:

find . -type d -maxdepth 1 |\
  while read DIRNAME
  do
    echo "${DIRNAME}" /home/inukaze/"${DIRNAME}"
  done

在我的例子中,它找到我當前主目錄中的所有目錄,並在此之后/home/inukaze/"${DIRNAME}

./.ssh /home/inukaze/./.ssh
./.subversion /home/inukaze/./.subversion
./.Trash /home/inukaze/./.Trash
./.Xcode /home/inukaze/./.Xcode
./Applications /home/inukaze/./Applications
./Desktop /home/inukaze/./Desktop
./Documents /home/inukaze/./Documents
etc…

在這個例子中,我只是使用echo來測試整體邏輯。 那就是使用帶有-type d選項的find ,它告訴它只找到目錄,並且-maxdepth 1連接到最大深度find應該去。 執行1深度不會探索比您所在目錄更深的任何目錄。

如何制作文件夾列表以“dot”(。)開頭

shopt -s dotglob
echo .*/ # This glob matches only dot-directories; however that includes ./ and ../

並在我的主目錄中創建符號鏈接?

shopt -s dotglob
for d in "$PWD"/.*/; do
  case "$d" in
    *./|*../) :;; # do nothing for these two directories
    *) ( cd && ln -s "$d" );;
  esac
done

上面比Ignacio Vazquez-Abrams的答案更冗長,但也只鏈接了除.點目錄. .. 它也適用於BSD / OSX。

我認為問題在於

ls -la | awk '{print$09}'

因為所有文件夾都以“/”結束,而“ln -sf”如果你在完成中添加/,則不會創建符號鏈接

我嘗試着

ls -la | awk '{print$09}' | sed 's/\\/*$//

只是為了刪除ls -la中的最后一個字符

哦,我想我解決了

我轉到我的備份文件夾,在本例中為/media/Compartido/.linux/Home/Inukaze

$ for file in $(ls -la | awk '{print$09}' | sed 's/\\/*$//') ; do sudo ln -sf "$PWD/$file" "/home/inukaze/$file" ; done

ln: <</home/inukaze/./.>> : cannot overwrite a directory

ln: <</home/inukaze/../..>> : cannot overwrite a directory


並准備好所有符號鏈接:=)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM