大家好我有grep的问题。我不知道shell脚本中是否还有其他搜索代码。 我正在尝试备份存储在我的Flash Disk中的文件夹AhmetsFiles,但同时我要按照扩展名将它们分组并保存到[extensionName]文件夹中。
一个例子:/media/FlashDisk/AhmetsFiles/lecture.pdf必须存储在/ home / $(whoami)/ Desktop / backups / pdf
中
问题是我无法复制名称中包含空格的文件。(讲座2.pptx) 在此介绍之后我的代码。
filename="/media/FlashDisk/extensions"
count=0
exec 3<&0
exec 0< $filename
mkdir "/home/$(whoami)/Desktop/backups"
while read extension
do
cd "/home/$(whoami)/Desktop/backups"
rm -rf "$extension"
mkdir "$extension"
cd "/media/FlashDisk/AhmetsFiles"
files=( `ls | grep -i "$extension"` )
fCount=( `ls | grep -c -i "$extension"` )
for (( i=0 ; $i<$fCount ; i++ ))
do
cp -f "/media/FlashDisk/AhmetsFiles/${files[$i]}" "/home/$(whoami)/Desktop/backups/$extension"
done
let count++
done
exec 0<&3
exit 0
答案 0 :(得分:2)
您的循环比需要的更复杂,不需要ls
或grep
或files
和fCount
变量:
for file in *.$extension
do
cp -f "/media/FlashDisk/AhmetsFiles/$file" "$HOME/Desktop/backups/$extension"
done
这适用于空格。
我假设您确实想将$extension
解释为文件扩展名,而不是像原始代码那样在文件名中间使用一些随机字符串。
答案 1 :(得分:1)
你为什么不
grep -i "$extension" | while IFS=: read x ; do
cp ..
done
代替?
此外,我相信您可能更喜欢grep -i ".$extension$"
之类的东西(将其锚定到行尾)。
另一方面,最佳方式可能是
cp -f /media/FlashDisk/AhmetsFiles/*.$extension "$HOME/Desktop/backups/$extension/"