将所有带扩展名的文件复制到适当的文件

时间:2015-02-02 10:40:25

标签: bash pdf copy-paste

我是创建.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;

3 个答案:

答案 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'在参数扩展下。