我是创建.sh文件(和bash脚本)的新手,我正在尝试创建一个可以读取的脚本,将副本文件重命名为具有相应名称的文件夹,但不知道如何解决这个问题。我希望你们中的一个能指出我正确的方向。
这是我的开始(还有一些错误)
#!/bin/bash
for i in 'find /temp_pdf -type f | xargs grep *.pdf'; #loop for findg all .pdf files residing in temp_pdf
do
#1234 invoice.pdf
directory=${i:0:4}; # read the first 4 chars of the file name
#cp 1234 invoice.pdf /copy/1234*
cp $i /copy/$directory*; #copy the the file to /copy/xxxx* folder
done;
答案 0 :(得分:0)
解决方案更容易:
$ find . -name \*.pdf -exec cp ...
如果您想了解更多信息look here。
修改强>
更简单:
$ cp **/*.pdf target_directory
答案 1 :(得分:0)
也许你想做这样的事情:
SOURCE="./temp_pdf"
DESTINATION="copy"
mkdir -p "$DESTINATION"
for i in `find "$SOURCE" -type f | grep 'pdf$'`; do #loop for findg all .pdf files residing in temp_pdf
cp -v "$i" "$DESTINATION" #copy the the file to DESTINATION folder (verbose)
done
我不确定您是否要使用全局目标文件夹。如果你想这样做,你可以在循环内完成。
答案 2 :(得分:0)
如果我在一个目录中有.ext文件,我想放在另一个目录中,同时改变文件名,我会这样做:
for file in path/to/dir1/*.ext; do
mv $file path/to/dir2/new_pref${file}new_suf
done
你可以将它放在一个名为ren.sh然后
的文件中$ chmod u+x ren.sh
$ ./ren.sh
new_pref
可能是某个字符串,new_suf
可能是.alt
或.new。如果要删除部分文件名,请使用${file%*id}
或${file##*id}
分别删除文件名开头或结尾的内容,直到id
为止。其中id
是文件名的重复出现部分,例如.
,_
或-
或其他内容。谷歌进行参数扩展以获取更多细节,或者查看“bash'在参数扩展下。