シェルのコマンドラインからこれを行うことができます。
filename="/home/vikrant_singh_rana/testing/110001_ABC Traffic_04May2020_header_only.csv"
output_filename=$(basename "$filename")
cat "/home/vikrant_singh_rana/testing/110001_ABC Traffic_04May2020_header_only.csv" > /home/vikrant_singh_rana/enrichment_files/"$output_filename"
'/home/vikrant_singh_rana/testing'
指定したファイルを読み込み、同じ名前のファイルを別のディレクトリに書き込むことができます。'/home/vikrant_singh_rana/enrichment_files'
シェルスクリプトで同じことをするとき。動作しません
#!/bin/bash
# Go to where the files are located
filedir=/home/vikrant_singh_rana/testing/*
first='yes'
#reading file from directory
for filename in $filedir; do
#echo $filename
output_filename=$(basename "$filename")
#echo $output_filename
#done
done > /home/vikrant_singh_rana/enrichment_files/"$output_filename"
このプログラムを実行すると、このエラーが発生します。
/home/vikrant_singh_rana/enrichment_files/: Is a directory
答え1
パス名拡張()を誤って使用しています*
。 muruのコメントによると、ループの内側と外側で変数を混在させています。
#! /bin/bash
source_dir_path='/home/vikrant_singh_rana/testing'
target_dir_path='/home/vikrant_singh_rana/enrichment_files'
cd "$source_dir_path" || exit 1
for filename in *; do
target_path="${target_dir_path}/${filename}"
test -f "$target_path" && { echo "File '${filename}' exists; skipping"; continue; }
cp -p "$filename" "$target_path"
done