使用bash ...
我希望迭代一个变量列表,以便每次出现' _Brkt';
echo "$BrackListAllFinal"
DSCF3649-DSCF3651_Brkt
DSCF3649.JPG 2014-07-21 13:34:44 On 1
DSCF3649.RAF 2014-07-21 13:34:44 On 1
DSCF3650.JPG 2014-07-21 13:34:45 On 2
DSCF3650.RAF 2014-07-21 13:34:45 On 2
DSCF3651.JPG 2014-07-21 13:34:45 On 3
DSCF3651.RAF 2014-07-21 13:34:45 On 3
DSCF3652-DSCF3654_Brkt
DSCF3652.JPG 2014-07-21 13:38:24 On 1
DSCF3652.RAF 2014-07-21 13:38:24 On 1
DSCF3653.JPG 2014-07-21 13:38:24 On 2
DSCF3653.RAF 2014-07-21 13:38:24 On 2
DSCF3654.JPG 2014-07-21 13:38:25 On 3
DSCF3654.RAF 2014-07-21 13:38:25 On 3
我试图在每次出现的行中显示文件名,这些行以' _Brkt'并停止 在下一次出现时,如果存在的话。我将从' _Brkt'中的每一行创建一个新目录,然后将顺序文件移到新目录中。
我已经尝试过了;
echo "$BrackListAllFinal" | awk '{print $1}' | awk '/.*\..*/, /_Brkt$/'
...和...
echo "$BrackListAllFinal" | awk '{print $1}' | sed -n '/_Brkt$/,/_Brkt$/p
例如......
为以' _Brkt'
结尾的每一行创建一个新目录DSCF3649-DSCF3651_Brkt
将顺序文件名移动到新目录中。
我无法在以' _Brkt'结尾的行后显示行。 我有点迷失在这个上,有人可以帮忙。
谢谢。
答案 0 :(得分:1)
让我们从头开始构建它:
首先,您希望迭代变量的行,这需要带有重定向的while循环
while read LINE; do
# ...
done < <(echo -e "$BrackListAllFinal")
现在您要将来自行提取为目录:简单的组更改
THEDIR='.'
while read LINE; do
SEDED=$(echo "$LINE" | sed 's/_Brkt$//')
if test "$SEDED" == "$LINE"; then
# File line
else
# Directory line
fi
done < <(echo -e "$BrackListAllFinal")
最后你要填写你的有效载荷
THEDIR=''
while read LINE; do
SEDED=$(echo "$LINE" | sed 's/_Brkt$//')
if test "$SEDED" == "$LINE"; then
# File line: Move the file
echo -n "Moving file '$LINE' .."
if test -z "$THEDIR"; then
echo ".. Error: Directory not yet set"
exit 1
fi
mv "$LINE" "$THEDIR" >/dev/null 2>&1
if test "$?" == "0"; then
echo ".. OK"
else
echo ".. Error: Move failed"
exit 2
fi
else
# Directory line: Remember and create directory
echo -n "Creating directory '$LINE' .."
THEDIR="$LINE";
mkdir -p "$THEDIR" >/dev/null 2>&1
if test "$?" == "0"; then
echo ".. OK"
else
echo ".. Error"
exit 3
fi
fi
done < <(echo -e "$BrackListAllFinal")
答案 1 :(得分:0)
Perl救援:
echo "$BrackListAllFinal" \
| perl -MFile::Copy=mv -lne 'if (/_Brkt/) { mkdir $d = $_ } else { s/ .*//; mv $_, $d }'