繁体   English   中英

在while循环中隐藏子目录

[英]Hide sub directories in while loop

我需要制作一个创建软/符号链接的脚本,但是还应该检测“〜/ linkedfiles”目录中是否已经存在链接,但是问题是$ file还包含子目录。 ($ file看起来像这样:“〜/ realfiles / files / file23.gz”,但是我只需要“ file23.gz”。)所以我的问题是,如何删除$ file中的子目录?

这是一些示例代码:

for file in ~/realfiles/files/*.gz
do

echo "Linking file: $file"
ln -s $file ~/linkedfiles
if [ $? -ne 0 ]; then
echo "[FAIL] Linking of $file failed!"
else
echo "[SUCCESS] $file successfully linked."
fi
done

似乎您需要路径的基本名称。 有两种方法可以做到这一点-经典的可靠方法是使用basename命令,而现代的但并非总是可靠的方法是使用shell参数扩展

for file in ~/realfiles/files/*.gz
do
    echo "Linking file: $file"
    ln -s "$file" "~/linkedfiles/$(basename "$file")"
    if [ $? -ne 0 ]
    then echo "[FAIL] Linking of $file failed!"
    else echo "[SUCCESS] $file successfully linked."
    fi
done

要么:

for file in ~/realfiles/files/*.gz
do
    echo "Linking file: $file"
    ln -s "$file" "~/linkedfiles/${file##*/}"
    if [ $? -ne 0 ]
    then echo "[FAIL] Linking of $file failed!"
    else echo "[SUCCESS] $file successfully linked."
    fi
done

在这两个脚本中,文件~/realfiles/files/file23.gz都将链接到~/linkedfiles/file23.gz ,我想这就是您想要的(尽管仍有提高该问题清晰度的空间,例如通过引用样本文件名的所需结果)。

稍微修改原始脚本即可

for filename in ~/realfiles/files/*.gz
do
echo "Linking file: $file"
[[ -h "~/linkedfiles/${var##*/}" ]] && continue
ln -s "$filename" ~/linkedfiles/
if [ $? -ne 0 ]
then
  echo "[FAIL] Linking of $filename failed!"
else
  echo "[SUCCESS] $filename successfully linked."
fi
done

笔记

  • -h选项和if [检查]文件是否为符号链接
  • ${var##*/}为您提供基本名称。 检查[参数扩展]
targetdir="$HOME/linkedfiles"    
for filename in $HOME/realfiles/files/*.gz; do
    # if filename is a regular file then ...
    if [[ -f "${filename}" ]]; then
        # if softlink does not exist in target then link it
        if [[ ! -h "${targetdir}/${filename##*/}" ]]; then
            echo "Linking ${filename}"
            ln -s "${filename}" "${targetdir}"
            (( $? == 0 )) && echo 'Link created' || echo 'Create link fails'
        else
            echo "Skipping because ${filename##*/} exists in ${targetdir}"
        fi
    fi
done

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM