如果目录包含特定字符串,则移动目录和文件(从目录名中删除字符串)


0

编辑以更好地解释问题。

所以我想扫描一个目录,在目录名的末尾查找包含--import-me的子目录,移动到包含所有文件的新目录,只需重命名dir而不用--import-me字符串

cd $some-dir
for f in `find . -name "*--import-me" `
do
rename=${f%--import-me}
echo mv $f "some-other-dir"/"$rename"
done

我明白了

mv ./iZombie /some-other-dir/./iZombie
mv (2015)--import-me /some-other-dir/(2015)

我希望它能给我

mv ./some-other-dir/iZombie (2015)

1
你不需要echo | sed,就${file%--import-me}足够了。你也有错别字。除此之外,你并没有真正说出你的问题。你只是发了言。
4ae1e1 2015年

1
定义“不起作用”。这是问题中最重要的部分。
4ae1e1 2015年

Answers:


0

从您的示例看来,*--import-me目录只存在于当前目录中,如果是这样,您可以使用这个单行程序:

find . -type d -name "*--import-me" -exec sh -c 'mv $0 some-dir/${0%--import-me}' {} \;

否则,如果您有嵌套目录,则必须使用此目录,请注意,如果/目标目录(some-dir)中存在,则必须转义它们\/

find . -type d -name "*--import-me" -exec sh -c 'mv $0 `echo $0| sed "s/.*\/\(.*\)--import-me/some-dir\/\1/g"`' {} \;

像这样的东西可以工作......但仍然没有 mv "$dldDir"/*_import-me "$libDir" mv "$libDir"/*_import-me "$libDir"/${0%_import-me}
jasenmichael 2015年

0

所以我似乎无法使这个工作,文件名总是在空格分割,所以它试图mv两个单独的目录。这是从一个脚本运行,理想情况下将找到包含“* _import-me”的目录,重命名并移动一个命令,但现在我试图将dirs(从$ dldDir移动到$ libDir)包含_import-me,然后在libDir中重命名dirs(删除字符串_import-me)

mv "$dldDir"/*_import-me "$libDir"
cd $libDir
find . -type d -name "*_import-me" -exec sh -c 'mv $0 `echo $0| sed "s/.*\/\(.*\)_import-me/"$libDir"\/\1/g"`' {} \;

所以,第一个mv工作,并且ls $ dldDir给了我

~# ls -1 $dldDir
Brother Bear 2 (2006)_import-me
Terminator Salvation (2009)_import-me

但第二个mv(在$ libDir中删除_import-me)我得到了

mv: target ‘(2009)_import-me is not a directory
mv: target ‘(2006)_import-me is not a directory
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.