This question already has answers here:
Extract filename and extension in Bash
(37个答案)
去年关门了。
好的,所以我正在做一个shell脚本,目的是“安全删除东西”,所以当调用“/safedell.sh file1 file2 file3”时,它将对文件进行TAR并将其发送到名为LIXO的文件夹。
我是一个空壳新手,所以我会尽量解释我的代码的每一步,让你们理解它,到目前为止我有:
#!/bin/bash
#Purpose = Safe delete
#Created on 20-03-2018
#Version 4.0
#START

##Constants##

dir="/home/cunha/LIXO"

#check to see if the imput is a file#
if ! [ -e $1 ]; then`
   echo "Not a file!"
    exit 0`
fi


###main###
##Cycle FOR so the script accepts multiple file inputs##
for file in "$@"; do
#IF the input file already exist in LIXO#
if [[ -f $dir/$file ]]; then
    echo "|||File EXISTS|||"
#IF the input file is newer than the file thats already in LIXO#
    if [[ $file -nt $2 ]]; then
            echo "file is newer"
    fi
else
echo "File doesnt exist, ziping it and moving"
fi
done`

我的问题:所以我在LIXO中有两个文件,teste1.txt和teste2.tar.bz2,我的问题是我目前编写的shell脚本在输入teste2.txt时找不到teste2.tar.bz2
-->输入:/safedell teste2.txt
>输出:文件不存在,紫萍…

最佳答案

要删除扩展名:

filename_without_ext="${file%.*}"

意思是,去掉以点开头的最短后缀。
然后检查存档是否存在类似的东西。
if [ -e "$dir/$filename_without_ext.tar.bz2" ]; then

关于linux - 在FOR循环中查找时,如何从名称中删除扩展名,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49452590/

10-10 08:07