我想写一个做特定事情的脚本:
我有一个txt文件,例如
from1/from2/from3/apple.file;/to1/to2/to3;some not important stuff
from1/from2/banana.file;/to1/to5;some not important stuff
from1/from10/plum.file;/to1//to5/to100;some not important stuff
现在我想在第一个分号(;)之后将文件从每个行(例如apple.file)复制,从原始目录树复制到新的非现有目录。
我尝试了几个类似问题的代码示例,但没有什么工作正常,我在bash脚本中太弱,无法找到错误。 请帮助:)
需要添加一些条件: 文件不仅需要复制,还需要重命名。 file.txt中的示例行:
from1/from2/from3/apple.file;to1/to2/to3/juice.file;some1
from1/from2/banana.file;to1/to5/fresh.file;something different from above
所以apple.file需要复制并重命名为juice.file并放入to1 / to2 / to3 / juice.file 我认为ch也会重命名文件,但
mkdir -p "$to"
从下面的回答将创建完整的文件夹路径与juice.file作为文件夹
在每行第二个分号之后会有所不同,那么如何将其剪掉? 感谢您的帮助
编辑:输入txt文件中没有空格。
答案 0 :(得分:1)
试试这段代码..
cat file | while IFS=';' read from to some_not_important_stuff
do
to=${to:1} # strip off leading space
mkdir -p "$to" # create parent for 'to' if not existing yet
cp -i "$from" "$to" # option -i to get a warning when it would overwrite something
done
答案 1 :(得分:1)
使用awk
(首先运行awk命令并确认输出正常,然后添加 |sh
进行复制)
awk -F";" '{printf "cp %s %s\n",$1,$2}' file |sh
使用shell(需要手动创建文件夹的更新,基于alfe的
while IFS=';' read from to X
do
mkdir -p $to
cp $from $to
done < file
答案 2 :(得分:0)
我遇到了同样的问题,并使用tar
来解决!发表here:
tmpfile=/tmp/myfile.tar
files="/some/folder/file1.txt /some/other/folder/file2.txt"
targetfolder=/home/you/somefolder
tar --file="$tmpfile" "$files"
tar --extract --file="$tmpfile" --directory="$targetfolder"
在这种情况下,tar
将自动为您创建所有(子)文件夹!最好,
纳比