将多个文件从文件夹移动到目录列表(撤消移动命令)

时间:2017-07-14 21:19:28

标签: linux bash copy move undo

我想通过将文件夹中的所有文件(“MySourceDir”)移回到.txt文件中指定的相应路径(“ListOfFilePaths.txt”)来撤消我执行的移动命令。

例如:

MySourceDir

File1.txt
File2.txt
File3.txt
.
.
.

我有一个文本文件,其中包含每个文件的文件路径,指示它们最初所在的目录,因此需要移回。

ListOfFilePaths.txt

/path/to/dirA/File1.txt
/path/to/dirB/File2.txt
/path/to/dirC/File3.txt

我可以用两种方式做到这一点。写一个循环1)grep每个文件的目录路径,然后将其移动到相应的grepped目录路径或者2)从目录路径中删除“File#.txt”部分,然后为每个文件执行mv命令列表,以便将第n个文件移动到第n个目录。

在任何一种情况下,我都不熟悉在bash中编写循环,所以任何帮助都会非常感激! (同样,也会感谢命令这些文件复制回原始文件夹而不是移动它们,保持时间戳保持不变:-))

1 个答案:

答案 0 :(得分:0)

根据我的理解,您需要:

  • 循环浏览文本文件
  • 获取该行,在最终斜杠后提取文本(以提供文件名)
  • 从行
  • 获取目标目录
  • 将文件从源目录复制到目标目录

以下代码应该有所帮助:

while read line; do
     fileName=$(basename $line)
     dirName=$(dirname $line)
     cp SourceDir/"$fileName" "$dirName"
done < ListOfFilePaths.txt

basename从文件路径中提取文件名。 dirname从文件路径中提取目录。

参考文献:

https://ss64.com/bash/dirname.html

https://linux.die.net/man/1/basename