2016-11-21 84 views
0

我有一个文本文件(log.txt),其中包含我希望文件最终到达的文件路径列表。Bash - 使用目标文件从txt文件移动文件

/root/NewDir/Testfile.txt 
/root/NewDir/Testfile2.txt 
/root/NewDir2/Alsoatest.txt 
... 

的文件当前坐在同一位置的log.txt

/root/Dustbin/log.txt 
/root/Dustbin/Testfile.txt 
/root/Dustbin/Testfile2.txt 
/root/Dustbin/Alsoatest.txt 
... 

我想创建一个脚本,可以采取不仅是文件名,并且将移动指定文件的位置说在log.txt文件中。

例如:

# restore Testfile.txt 

结果应当TESTFILE.TXT从/根/垃圾桶移动/ ...到/根/ NEWDIR/...

我在一个总的新手bash/shellscript,并试图研究这个好几个小时,但完全难住! 我知道我需要使用'mv'函数,但不知道如何通过匹配文件名来填充log.txt文件中指定的目标!

会有人有任何想法或能够指出我在正确的方向吗?

+2

SO,不存在编写你的代码,这个问题可能会让你开始正确的方向http://superuser.com/questions/538306/move-a-list-of-filesin-a-text-file -to-a-directory以及'basename'功能。如果遇到问题,请将有问题的代码添加到此问题中,我们将帮助 –

+2

循环访问'log.txt'并在每个文件名上调用'basename',这会返回不带目录的文件名。如果它与您要恢复的名称相匹配,则使用文件名作为'mv'的目的地。 – Barmar

+1

除了尝试搜索类似的回答问题和研究'mv'的其他建议外,请查看[mmv](http://www.tldp.org/LDP/GNU-Linux-Tools-Summary/html/x4055.htm )并重命名。 – artdanil

回答

2

与尝试:

#!/bin/bash 

dustbin="/root/Dustbin" 
file="$1" 

mv $dustbin/$file $(grep "/$file$" $dustbin/log.txt) 

根据你的要求,你可以之前的 “MV” 提高脚本添加一个 “MKDIR”,......。

+0

感谢那 这有助于指向正确的方向,让我的脚本更贴近我的需求 – William