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