Bash:想要将包含空格的一定数量的文件移动到不同的目录

时间:2017-08-30 23:32:20

标签: linux bash unix command-line

所以我对bash和Stack Overflow一般很新,所以请原谅我,如果我可能遗漏了什么。

我一直在尝试创建一个脚本,将一定数量的文件(例如:3个文件)移动到另一个目录中,这些文件可能包含空格(如"hello world.txt")。

我尝试了几种不同的方法来获取带有空格的文件,但都证明有点困难,最后将其缩小到只使用*.csv。例如,代码看起来像(简化):

for file in *.csv; #grab 3 files
do
     echo "$file";
     mv "$file" "$TDIR"
done

我只想移动一定数量的文件,比如3. $TDIR在这种情况下是一个目标目录来移动它们。

我这样做是因为我能够抓取整个文件名"Hello World.txt",而不是抓取"Hello""World.txt"

我尝试过使用不同的东西:

ls -p | grep -v / | head -3

但是它给了我上面的结果,它创建了2个文件(导致问题的空格)。

对不起它有点长,但我一直在努力解决这个问题,非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

最小的必要改变是使用你拥有的循环,但只是提前爆发:

((count = 3))
for file in *.csv ; do
     echo "$file"
     mv "$file" "$TDIR"
     ((count--))
     [[ ${count} -eq 0 ]] && break;
done

这个解决方案唯一真正的潜在的缺点是,如果你有一个真正惊人的文件数量,它可能会失败,所以很多shell文件开始在负载下挣扎。但是,我发现它通常比尝试记住或研究能够实现相同行为的92个find参数更容易: - )