Bash 基于文本文件将文件移回其原始位置

Bash 基于文本文件将文件移回其原始位置,bash,macos,awk,terminal,find,Bash,Macos,Awk,Terminal,Find,我用mv-v命令移动了一堆文件。最后我有一个文本文件,其中包含如下内容: ` ` 我需要根据此文本文件将每个文件从Downloads移回其原始位置。原始位置将是文本文件中-->前面的字符串。匹配条件是文件名 任何帮助都将不胜感激 @杰里米档案 我的文件可以在这里找到 在我的mac电脑上,我使用了以下代码: #!/bin/bash while IFS= read -r line; do #use http://wiki.bash-hackers.org/syntax/pe#substri

我用
mv-v
命令移动了一堆文件。最后我有一个文本文件,其中包含如下内容: `

`

我需要根据此文本文件将每个文件从
Downloads
移回其原始位置。原始位置将是文本文件中
-->
前面的字符串。匹配条件是
文件名

任何帮助都将不胜感激

@杰里米档案

我的文件可以在这里找到

在我的mac电脑上,我使用了以下代码:

#!/bin/bash

while IFS= read -r line; do
    #use http://wiki.bash-hackers.org/syntax/pe#substring_removal to grab the parts we want
    origin=${line% --> *}
    current=${line#* --> }
    mv -- "$current" "$origin"
done < ~/Desktop/myTextFile.txt
我想指出的是,
/Volume/Public
已正确映射到我的计算机上,并且文件存在于
from_tv_shows
位置:

WYSIWYG:Desktop cip$ find /Volumes/Public/Downloads/from_tv_shows/ -name 'Dimension.404.S01E04.WEBRip x264-RMTeam.mkv'
/Volumes/Public/Downloads/from_tv_shows//Dimension.404.S01E04.WEBRip x264-RMTeam.mkv
WYSIWYG:Desktop cip$ 
我做错了什么?

而IFS=read-r行;做
while IFS= read -r line; do
    #use http://wiki.bash-hackers.org/syntax/pe#substring_removal to grab the parts we want
    origin=${line% --> *}
    current=${line#* --> }
    mv -- "$current" "$origin" 
done < myTextFile.txt
#使用http://wiki.bash-hackers.org/syntax/pe#substring_removal 抓住我们想要的部分 原点=${line%-->*} 当前=${line#*-->} mv--“$current”“$origin” 完成
我们执行子字符串删除,其中
%
将所有内容保留在子字符串之前(因此我们将所有内容保留在
-->
),而
#
将所有内容保留在之后(因此我们将所有内容保留在
-->
),并将
*
作为多字符通配符


是bash“for line in file”语法的工作原理。

不清楚,请在您的帖子中详细说明您的问题,然后让我们知道。@hek2mgl这很容易解决。我为自己创建了一个脚本
myMove.sh
,并尝试首先回显
$origin
$current
;为了看看它是否有效,在实际移动之前。而且它似乎不起作用。两个变量都给了我整条线。@nbnlko,经过测试和验证;使用提供的示例文本在我的机器上工作。@jeremysprofile我已尝试更新了问题,并提供了一个指向文本文件的链接,其中包含原始名称。@nbnlko,正如您从日志中看到的,您的文本文件使用
->
作为分隔符,而不是您最初所说的
-->
。如果您在我对
->
的回答中更改
-->
,它将起作用。
WYSIWYG:Desktop cip$ find /Volumes/Public/Downloads/from_tv_shows/ -name 'Dimension.404.S01E04.WEBRip x264-RMTeam.mkv'
/Volumes/Public/Downloads/from_tv_shows//Dimension.404.S01E04.WEBRip x264-RMTeam.mkv
WYSIWYG:Desktop cip$ 
while IFS= read -r line; do
    #use http://wiki.bash-hackers.org/syntax/pe#substring_removal to grab the parts we want
    origin=${line% --> *}
    current=${line#* --> }
    mv -- "$current" "$origin" 
done < myTextFile.txt