Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 删除/移动在所有方面都具有相同文件名的文件,但有一组文件添加了特定前缀_Bash_Prefix_Identify - Fatal编程技术网

Bash 删除/移动在所有方面都具有相同文件名的文件,但有一组文件添加了特定前缀

Bash 删除/移动在所有方面都具有相同文件名的文件,但有一组文件添加了特定前缀,bash,prefix,identify,Bash,Prefix,Identify,我有一大套工作文件,格式为a.mp4 b.txt c.avi d.doc等,扩展名与问题无关。我还拥有一组文件,其中包括相同的命名文件,但有一个通用的特定前缀breaked_ua.mp4,breaked_b.txt 如果我有a.mp4和breaked_a.mp4,我想将breaked_a.mp4移动到保留目录。如果我破坏了d.mp4,但没有匹配的d.mp4,那么就别管它 我有一些代码成功地用于识别和移动具有我想要修改的相同扩展名的文件 这是同一个扩展文件的工作示例代码的形式,我想修改,如果可能的

我有一大套工作文件,格式为a.mp4 b.txt c.avi d.doc等,扩展名与问题无关。我还拥有一组文件,其中包括相同的命名文件,但有一个通用的特定前缀breaked_ua.mp4,breaked_b.txt

如果我有a.mp4和breaked_a.mp4,我想将breaked_a.mp4移动到保留目录。如果我破坏了d.mp4,但没有匹配的d.mp4,那么就别管它

我有一些代码成功地用于识别和移动具有我想要修改的相同扩展名的文件

这是同一个扩展文件的工作示例代码的形式,我想修改,如果可能的话,做这项工作的原始作者的荣誉

#!/bin/bash                                                                                                                                                                                                                                                                      

# Name of source directory                                                                                                                                                                                                                                                       
SOURCE_DIR=.

# Name of destination directory                                                                                                                                                                                                                                                  
DEST_DIR=already_converted_m4v

# Create the destination directory for the moved files, if it doesn't already exist.                                                                                                                                                                                             
[ ! -d $DEST_DIR ] && mkdir -p $DEST_DIR

find $SOURCE_DIR -maxdepth 1 -type f -iname "*.avi"  | while read fin
do
#echo "m4v doing avi"                                                                                                                                                                                                                                                            
  fm4v=${fin/.avi/.m4v}
 [ -f "$fm4v" ] && gmv -v --backup=numbered "$fin" $DEST_DIR/
done
我的第一次尝试显然不起作用,看起来很可怕:

#!/bin/bash                                                                                                                                                                                                                                                                      

# Name of source directory                                                                                                                                                                                                                                                       
SOURCE_DIR=.

# Name of destination directory                                                                                                                                                                                                                                                  
DEST_DIR=Already_broken

# Create the destination directory for the moved files, if it doesn't already exist.                                                                                                                                                                                             
[ ! -d $DEST_DIR ] && mkdir -p $DEST_DIR

find $SOURCE_DIR -maxdepth 1 -type f -iname "*"  | while read fin
do
#echo "working to find existing broken and unbroken files"                                                                                                                                                                                                                       
  filetest_basename=$(basename "$fin" )
  filetest_extension=$(extension "$fin" )
echo $filetest_basename
echo $filetest_extension
  fileok=${filetest_basename/!broken_/broken_}
 [ -f "$fileok" ] && gmv -v --backup=numbered "$fin" $DEST_DIR/
done
感谢您的帮助

查找与此无关,一个简单的shell循环就足够了:

SRCDIR='。' DSTDIR=‘已经坏了’ 如果[-d$DSTDIR];然后 mkdir-p-$DSTDIR fi 对于磨合$SRCDIR/磨合*;做 如果[-f${breaked%${breaked*/}}${breaked*/breaked}];然后 echo gmv-v-backup=编号为$breaked-$DSTDIR fi 完成 如果它的输出看起来不错,请删除echo

一些注意事项:

我们不能在这里使用${BREAKED/BREAKED_},因为将来SRCDIR可能包含BREAKED_}。 嵌套的PE${breaked*/}需要被引用,因为它的结果可能包含元字符,这将导致不需要的结果。
a.mp4和a.mp4是否在同一目录中?以某种方式可视化目录结构会使这一点更加清晰,因为所有文件都在同一个目录中。我当前的示例代码使用-maxdepth 1来限制搜索。如果我必须扩展它来搜索在所有方面都具有相同文件名的文件,那么这次与前缀无关,但其中一组有一个附加后缀。rar代码有没有简单的修改?例如1.txt.rar和1。txt@RichardL这会更容易,只要用if[-f$break.rar]替换if行即可;然后