동적 파일 이름을 생성하고 다른 디렉터리에 쓰기

동적 파일 이름을 생성하고 다른 디렉터리에 쓰기

쉘 명령줄에서 이 작업을 수행할 수 있습니다.

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

관련 정보