/ root / mp3 / path包含以下文件。 我想移动文件包含字母"在"到其他文件夹
2017-02-10-12-11-05-in.talaw
2017-02-10-12-11-05-out.talaw
2017-02-10-12-12-05-in.alaw
2017-02-10-12-12-05-out.alaw
$FILES=/root/mp3/*
for f in "$FILES"
do
ef=$(ls $f | awk -F"." '{print $1}' | awk -F "-" '{print $NF}')
#to check in for a file
if [ $ef = "in" ]
#if file contian "in" letter then move to other folder )
then
mv /FILES /sotrage
fi
done
如果[$ ef ="在" ] 如果我试着用[" $ ef" =="在" ]我没有得到当前的输出
i am using if [ $ef = "in" ] to compare if file contains "in"
然后只有它应该将文件conatians移动到其他文件夹
答案 0 :(得分:0)
不确定您的竞争要求,因为您的问题仅与条件尝试将条件更改为[ $ef == "in" ]
或[[ $ef == "in" ]]
有关因为单个=表示它将作为赋值运算符而不是条件。请试一试,如果这对您有所帮助,请告诉我。
答案 1 :(得分:0)
你真正想做的是mv -t /destination /root/mp3/*-in.*
由于您将模式存储在变量中,您遇到了问题:
$FILES=/root/mp3/*
for f in "$FILES"; do
此时,$f
包含文字字符串"/root/mp3/*"
- 由于"$FILES"
周围的引号
然后,你这样做
ef=$(ls $f | awk -F"." '{print $1}' | awk -F "-" '{print $NF}')
$f
未加引号,因此shell扩展了模式,ls
最终看到了所有文件的列表。您正在通过awk
几行文字。 $ef
将包含换行符。此时请尝试echo "$ef"
。