2017-03-28 26 views
-1

私は目的が、私はすべてのライン上のフォルダの名前が含まれているmy_file.txtという名前のファイルを持っているということですこのUNIXコマンドを修正してファイルをディレクトリにコピーするにはどうすればよいですか?

while read line; do ls $line | head -10 | cp xargs dest_folder; done < my_file.txt 

動作しない、次のコマンドを持っています。このファイルのすべての行に記載されている各ディレクトリから10個のファイルをdest_folderにコピーしたいと思います。

上記のコマンドはどのように修正できますか?

+0

どのような基準で 'コピー10ファイル'?作成時間または変更時間によって? – Inian

答えて

2

あなたは、次のbashスクリプトでこれをachive CAND:

#!/bin/bash 

# first argument is the filename which contains ton each line a name of a folder 
# teh second argument is the destination folder 

while IFS='' read -r line || [[ -n "$line" ]]; do 
    filesToCopy=($(ls $line |head -n 10)) 
    for i in "${filesToCopy[@]}" 
    do 
     : 
     cp $line/$i $2 
    done 

done < "$1" 

用途:

chmod +x your_bash_script 
./your_bash_script my_file.txt dest_folder 

注:

ファイル内のフォルダ名は絶対パスでなければなりません。

+0

これは今試してみてください。ありがとう。 –

+0

魅力的な作品です。ありがとう。 –

+0

うれしいです! –

1

あなたは-Iオプションでxargsを使用することができます。

while read line; do ls $line | head -10 | xargs -I % cp % dest_folder; done 
1

通常、プログラムによってshould not use the output of lsになります。 2番目のループを使用して、各ディレクトリのファイルを反復処理します。

while IFS= read -r directory; do 
    count=0 
    for f in "$directory"/*; do 
     ((count++ < 10)) || break 
     cp -- "$f" "$dest_folder" 
    done 
done < my_file.txt 

これはのディレクトリで見つかった法的なファイル名を動作します。

関連する問題