2016-10-12 3 views
1

ディレクトリにはたくさんのファイルがあります。同じ拡張子を持つ別のディレクトリに同じファイルをコピーしたいと思います。ファイル名のみを取り出すためのシェルコマンド

$ pwd 
source_path 
$ ls 
Test File 1.xyz 
test File 2.xyz 
Blah Blah.xyz 

私はそれらを別のディレクトリにコピーしたいと思います。

無数これを実現するための方法が、おそらく最もストレートフォワードと読めるが、サブストリングの置換を使用することです
$ pwd 
dest_path 
$ ls 
Test File 1.abc 
test File 2.abc 
Blah Blah.abc 

答えて

0

cd source_path 

for file in *.xyz; do 
    cp -av "$file" "dest_path/${file/xyz/abc}" 
done 
+2

'$ {file/.xyz/.abc}'は実際の拡張文字列として安全かもしれません。 'c')を簡単に見つけてファイル名に置き換えることができます。 @Kenavozは同意した。 – SLePort

+0

また、文字列の最後を見ている、より少なく使用された$ {variable /%foo/bar}置換があります。どちらも一緒に結合すればかなり安全です。 – Jameson

0

あなたは2つの段階

cp "source_path/*.xyz" dest_path 
rename 's/\.xyz$/\.abc/' "dest_path/*.xyz" 
0
でこれを行うことができます

この長い方法では、source_pathファイルに必要なファイル拡張子を設定することができます。

cd $source_path 

new_file_ext=".abc" 
ls > files.tmp # Put ls output to a temporary file 
while read -r line || [[ -n "$line" ]]; do # read the temporary file line by line 
    file_name=$(echo $line | cut -d'.' -f1) # split the name at the '.' and keep part one 
    cp $line "$dest_path"/"$file_name""$new_file_ext" # copy file at dest and add new extenssion 
done < "files.tmp"