我几乎没有使用unix和shell脚本的经验,但我需要使用相同的文件填充100个类似的文件夹,只有特定文本的差异。
例如,我有“dataxxx”文件夹,其中包含2个文件。我需要将该文件夹复制到data1,data2,data3,...,data100。其中的文件是简单的文本文件,我需要将所有dataxxx实例替换为文件夹名$ # Go to https://github.com/cheeriojs/cheerio/ and fork it
$ git clone https://github.com/Delgan/cheerio/ && cd cheerio # assuming that's your GH username :)
$ git remote add pr-base https://github.com/digihaven/cheerio/
$ git fetch pr-base
$ git checkout pr-base/master -b 641-appendTo_prependTo
$ # work work work
$ git add #...
$ git commit -m 'Fixed all the things! See #641, fixes #726'
$ git push origin 641-appendTo_prependTo
$ # Go to your repo and make the PR
$ # ...
$ # SUCESS! (??!)
。
答案 0 :(得分:1)
以下是如何完成任务的第一个示例。请注意,此示例很容易推广到任何符号,而不仅仅是数字{1..100},并说明了许多有用的shell习语。
首先,创建一个包含100个条目的文件,每行一个(您可以使用编辑器,或者文件可能是数据库查询的结果等)。
cat > list <<HERE
1
2
3
...
100
HERE
(上面显示了如何在没有编辑器的情况下创建文件,并且可以放入脚本中)。
或者您可以使用脚本来计算(请参阅David Rankin的答案)等。
for i in $(seq 1 100); do echo $i; done > list
然后是一个简短的脚本,为列表的每个元素执行复制等,
for number in `cat list`; do
symbol="data$number"; #construct string from variable, constant text
mkdir $symbol; #make the directory you need
cp -p dataxxx/* $symbol/; #copy your template files
#now you need to edit each file in directory $symbol/
for file in `ls $symbol`; do
sed -i ‘s/dataxxx/$symbol/g’ $file; #rewrite your template files
done
done
使用sed进行更改 - 更改命令
文件中单词的所有实例sed -i ‘s/original_word/new_word/g’ file.txt
最后的“g”告诉sed全局执行操作。
答案 1 :(得分:0)
假设dataxxx
位于桌面上。现在只需两个命令即可完成此操作。
mkdir ~/Desktop/data{1..100}
for d in ~/Desktop/data{1..100}; do
cp -a ~/Desktop/dataxx "$d"
done
将其保存到名为copy.sh的文件中并由bash copy.sh
运行(检查ubuntu
。不同的linux发行版可以通过不同的程序运行sh
文件。)
这个对我有用 。如果有效,请回复。有关更多信息,请参阅使用终端man cp
答案 2 :(得分:0)
这是另一个使用seq
并包含输入和目录创建的错误检查/验证。您可以通过取消注释dataxxx
命令来选择是否在最后删除原始rm
目录:
#!/bin/sh
[ -d "$1" ] || { ## validate source directory given
printf "error: insufficient input, usage: %s srcdir\n" "${0//*\//}"
exit 1
}
for i in $(seq 1 100); do
newdir="data$i" ## form new directory name from seq val
mkdir -p "$newdir" || { ## create new directory data1 - data100
printf "error: directory creation failed '%s'\n" "$newdir"
exit 1
}
cp -a "$1"/* "$newdir" ## copy contents of dataxxx to $newdir
done
# rm -f "$1" ## optionally remove original source directory